spring security登录404

时间:2018-04-27 03:57:21

标签: java spring spring-boot spring-security

我正在探索一点春天。 为了方便端点,我遇到了春季启动,请看:

@Controller
@EnableAutoConfiguration
public class SampleController {

    @RequestMapping("/sample")
    @ResponseBody
    String sample() {
        return "Hello sample!";
    }

    @RequestMapping("/sample2")
    @ResponseBody
    String sample2() {
        return "Hello sample secured!";
    }
}

逻辑上,端点可在localhost上访问:8181 / sample

但是在使用spring security时,“受保护”端点因为登录页面给我404而无法访问,

login page gives me 404

我的安全类如下:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/sample" ).permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
                .logout()
                .permitAll();
    }

    @Bean
    @Override
    public UserDetailsService userDetailsService() {
        UserDetails user =
                User.withDefaultPasswordEncoder()
                        .username("user")
                        .password("password")
                        .roles("USER")
                        .build();

        return new InMemoryUserDetailsManager(user);
    }
}

我可以访问 / sample ,因为它没有受到保护。但无法访问 / sample2 ,因为它重定向到 / login

根据本指南配置我的安全类:https://spring.io/guides/gs/securing-web/

2 个答案:

答案 0 :(得分:2)

  

我可以访问/sample,因为没有受到保护。但无法访问   / sample2重定向到/login

因为您没有在安全配置中绕过/sample2

 .antMatchers("/sample2" ).permitAll()

另一件事是,您已指定自定义登录页面

.formLogin()
.loginPage("/login")

您必须提供登录页面。

答案 1 :(得分:0)

userDetailsService注入authenticationProvider

    @Bean
    public AuthenticationProvider authenticationProvider(){
        DaoAuthenticationProvider authenticationProvider=new CustomAuthenticationProvider();
        authenticationProvider.setUserDetailsService(userDetailsService());
        return authenticationProvider;
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception{
        auth.authenticationProvider(authenticationProvider());
    }

将此配置添加到spring security:

    .antMatchers("/sample2").hasRole("USER")