改造上节,使用自定义的用户名和密码

第一种

在SecurityConfig类中添加如下代码

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("user1").password("123").roles("USER");
    }

第二种

在SecurityConfig类中添加如下代码

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception{

        auth
                .inMemoryAuthentication()
                .withUser("user2").password("123").roles("USER")
                .and()
                .withUser("test").password("123").roles("USER");
    }

我们打开浏览器,输入自己定义的用户名和密码,即可
你也可以多几个用户,就多几个withUser即可。
.and().withUser("test").password("test123").roles("ADMIN");  这样我们就有了一个用户名为test,密码为test123的用户了。
第一种的只是让我们体验了一下Spring Security而已,我们接下来就要提供自定义的用户认证机制及处理过程。

角色权限原理概要

在讲这个之前,我们需要知道spring security的原理,spring security的原理就是使用很多的拦截器对URL进行拦截,以此来管理登录验证和用户权限验证。
用户登陆,会被AuthenticationProcessingFilter拦截,调用AuthenticationManager的实现,而且AuthenticationManager会调用ProviderManager来获取用户验证信息(不同的Provider调用的服务不同,因为这些信息可以是在数据库上,可以是在LDAP服务器上,可以是xml配置文件上等),如果验证通过后会将用户的权限信息封装一个User放到spring的全局缓存SecurityContextHolder中,以备后面访问资源时使用。

 

所以我们要自定义用户的校验机制的话,我们只要实现自己的AuthenticationProvider就可以了。在用AuthenticationProvider 这个之前,我们需要提供一个获取用户信息的服务,实现  UserDetailsService 接口

用户名密码->(Authentication(未认证)  ->  AuthenticationManager ->AuthenticationProvider->UserDetailService->UserDetails->Authentication(已认证)

了解了这个原理之后,就进入一下节啦

<span data-type="color" style="color:#F5222D">出现错误</span>

如果登录时报错

image.png | left | 827x121

说明没有配置密码Encoder,我们加一下如下代码到配置类中,方法是过时的。

    @Bean
    public static PasswordEncoder passwordEncoder() {
        return NoOpPasswordEncoder.getInstance();
    }
Last modification:December 21st, 2018 at 11:38 am
If you think my article is useful to you, please feel free to appreciate