无法通过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中排除登录页面

如何在 Spring Security 中通过 jdbc 身份验证使用自定义登录页面

Spring Security 登录页面

自定义登录表单无法使用 Spring Security