下面是我的控制器类
@RestController
public class MainController {
@GetMapping("/")
public String home(){
return "<h1>Welcome All</h1>";
}
@GetMapping("/user")
public String user(){
return "<h1>Welcome User</h1>";
}
@GetMapping("/admin")
public String admin(){
return "<h1>Welcome Admin</h1>";
}
}
下面是我的SpringSecurityConfig类。
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("user").password("user").roles("USER")
.and()
.withUser("admin").password("admin").roles("ADMIN");
}
@Bean
public PasswordEncoder getPasswordEncoder(){
return NoOpPasswordEncoder.getInstance();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/admin").hasRole("ADMIN")
.antMatchers("/user").hasRole("USER")
.antMatchers("/").permitAll()
.and().formLogin();
}
}
我无法通过登录页面。当我输入用户名和密码时,它将重定向回登录页面。甚至我已经启用了csrf禁用功能,但仍然无法正常工作。
答案 0 :(得分:0)
可能是您的密码编码器正在创建问题。
尝试
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
String user = passwordEncoder().encode("user");
String admin = passwordEncoder().encode("admin");
auth.inMemoryAuthentication()
.withUser("user").password(user).roles("USER")
.and()
.withUser("admin").password(admin).roles("ADMIN");
}
@Bean
public PasswordEncoder getPasswordEncoder(){
return new BCryptPasswordEncoder();
}
或者如果您想保留NoOpPasswordEncoder
作为编码器
如果您使用的是inmemoryAuthentication
,请像这样更改Spring Security 5
这会将密码编码器委派给NoOpPasswordEncoder
。
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("user").password("{noop}user").roles("USER")
.and()
.withUser("admin").password("{noop}admin").roles("ADMIN");
}
如果这不起作用。请在日志中查找任何错误并添加日志。
编辑1:
对于403错误,请在您的配置中添加httpBasic()
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.httpBasic()
.and()
.authorizeRequests()
.antMatchers("/admin").hasRole("ADMIN")
.antMatchers("/user").hasRole("USER")
.antMatchers("/").permitAll()
.and().formLogin();
}