Java SpringBoot公共匹配器

Java SpringBoot公共匹配器,java,spring,spring-boot,spring-mvc,spring-security,Java,Spring,Spring Boot,Spring Mvc,Spring Security,我有一个带有此映射的Spring Boot应用程序: @GetMapping(值={”/“,}) 公共字符串主页(模型){ } 及 localhot:8080 localhost:8080/ localhost:8080/ localhost:8080/。 重定向到/,但不 localhost:8080/... 在WebSecurityConfig中,我仅有的一个公共匹配器是:/ 我想限制对localhost:8080/和localhost:8080/。 在这里: 我举了一个与你类似的简

我有一个带有此映射的Spring Boot应用程序:

@GetMapping(值={”/“,})
公共字符串主页(模型){
}

  • localhot:8080
  • localhost:8080/
  • localhost:8080/
  • localhost:8080/。
重定向到
/
,但不

localhost:8080/...
WebSecurityConfig
中,我仅有的一个公共匹配器是:
/

我想限制对
localhost:8080/
localhost:8080/。

在这里:


我举了一个与你类似的简单例子。我正在使用curl(不是web浏览器)进行测试,结果如下:

  • localhost:8080/
    内部服务器错误
此异常在服务器中引发:org.springframework.security.web.firewall.RequestRejectedException:请求被拒绝,因为URL未规范化

  • localhost:8080/。
    请求错误
似乎嵌入式tomcat给了您这样的响应。我尝试添加一个全局错误控制器,我可以在spring中得到错误

  • localhost:8080/…
    未找到终结点
这是EXEPCED,因为我没有此类端点“/”的任何映射


我认为当您键入
localhost:8080/
localhost:8080/)时,您的浏览器实际上是在请求
localhost:8080/。
您的spring boot应用程序没有重定向

,这是因为
是别名当前目录,
是父目录,而
代表具有该名称的资源。
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    private final UserSecurityService userSecurityService;
    private final Environment env;

    private static final String SALT = "fd&l23j§sfs23#$1*(_)nof";

    public WebSecurityConfig(UserSecurityService userSecurityService, Environment env) {
        this.userSecurityService = userSecurityService;
        this.env = env;
    }

    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder(12, new SecureRandom(SALT.getBytes()));
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
        encodingFilter.setEncoding("UTF-8");
        encodingFilter.setForceEncoding(true);

        http.addFilterBefore(encodingFilter, CsrfFilter.class);
    
        http.csrf().disable();
    
        http
            .authorizeRequests()
                .antMatchers(publicMatchers()).permitAll()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login.html")
                .defaultSuccessUrl("/advertise.html")
                .failureUrl("/login.html?error").permitAll()
                .and()
            .logout()
                .permitAll()
                .and()
            .rememberMe()
                .key("uniqueAndSecret");
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {

        auth
            .userDetailsService(userSecurityService)
                .passwordEncoder(passwordEncoder());
    }

    private String[] publicMatchers() {

        final String[] PUBLIC_MATCHERS = {
                "/webjars/**",
                "/css/**",
                "/fonts/**",
                "/images/**",
                "/img/**",
                "/js/**",
                "/home.html",
                "/links/**",
                "/links.html",
                "/favicon.ico",
                "/forgotmypassword.html",
                "/directory/**",
                "/",
                "/error/**/*",
                "/h2-console/**",
                ForgotMyPasswordController.FORGOT_PASSWORD_URL_MAPPING,
                ForgotMyPasswordController.CHANGE_PASSWORD_PATH
        };

        return PUBLIC_MATCHERS;
    }
}