无法通过Spring Security中的登录页面
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法通过Spring Security中的登录页面相关的知识,希望对你有一定的参考价值。
下面是我的控制器类
@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禁用功能,但仍然无法正常工作。
答案
可能是您的密码编码器正在创建问题。
尝试此
@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("noopuser").roles("USER")
.and()
.withUser("admin").password("noopadmin").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();
以上是关于无法通过Spring Security中的登录页面的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security - 无法将默认登录页面更改为自定义
无法在 Spring Boot Security 中登录到我的自定义登录页面
Spring mvc / security:从spring security中排除登录页面