@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而无法访问,
我的安全类如下:
@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/
答案 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")