Spring安全根身份验证

时间:2018-04-26 08:50:41

标签: spring spring-security

我有一个简单的WebSecurityConfiguration配置类,它定义了我的应用程序在安全级别上的工作方式。

@Configuration
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

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

                .antMatcher("/**")
                .authorizeRequests()
                .antMatchers("/register", "/login").permitAll()
                .anyRequest().authenticated()

                .and()
                .formLogin()
                .loginPage("/login")
                .failureUrl("/login?error")
                .passwordParameter("password")
                .usernameParameter("emailAddress")
                .successHandler(authenticationSuccessHandler())
                .permitAll()

                .and()
                .logout()
                .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                .logoutSuccessUrl("/")
                .permitAll()

                .and()
                .httpBasic();
    }

    @Bean
    public SavedRequestAwareAuthenticationSuccessHandler authenticationSuccessHandler() {
        return new SavedRequestAwareAuthenticationSuccessHandler();
    }

}

我还有一个@Controller,它定义了两个简单的端点

@Controller
public class HomeController {

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String getHome() {
        return "home";
    }

    @RequestMapping(value = "/test", method = RequestMethod.GET)
    public void testEndpoint() throws CreateException {
        return "test";
    }

}

加载应用程序并导航到localhost:8080/test时,我会按预期重定向到登录表单。但是,当我导航到localhost:8080/localhost:8080(没有转发)时,我会看到“主页”页面,我希望将其重定向到localhost:8080/login

我尝试将.antMatcher("/**")更改为.antMatcher("**"),但这也没有达到预期的效果。

1 个答案:

答案 0 :(得分:0)

问题在于,.formLogin().logout().permitAll()结尾。这允许根localhost:8080在未经过身份验证的情况下通过。

删除它们已解决了这个问题。