Spring Security的登录过程

SpringSecurity的登录过程:

1. UsernamePasswordAuthenticationFilter: 获得用户提交的用户名和密码信息 

2. UserDetailsService: 由其封装用户对象 

3. AbstractUserDetailsAuthenticationProvider: 转由其进行密码和权限验证,验证通过后封装一个Authentication 

4. ProviderManager: 会将Authentication封装到SecurityContext中(默认情况下,ProviderManager会在认证成功后清除掉Authentication的密码信息,但会保留用户名称) 

5. AbstractRememberMeServices :判断请求参数中是否包含_spring_security_remember_me参数,如果包含并且值为(true,on,yes,1)中的任意一个,则将用户名和密码信息保存进cookie,否则不做处理 

6. AccessDecisionManager :由其决定是否放行 

7. 之后在请求被保护的资源时,RememberMeAuthenticationFilter会先判断是否Authentication已经失效,如果失效,则试图从cookie中寻找,找到则重新封装Authentication。


login.jsp

    
   
   

security-context.xml


   
   

   
   

   
   


   
   

   
   


   
   
    
    
    
        
     
     
    
    
    

   
   

AuthorizationService.java 

@Service("AuthorizationService")
@Transactional(readOnly = true)
public class AuthorizationService implements UserDetailsService {

    @Autowired
    private AuthcationService authcationService;

    /*
     * (non-Javadoc)
     * @see
     * org.springframework.security.core.userdetails.UserDetailsService#loadUserByUsername(java.
     * lang.String)
     */
    @Override
    public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException {
        org.snippets.demo.security.User dbUser = authcationService.getUserByUserName(userName);
        boolean enabled = true;
        boolean accountNonExpired = true;
        boolean credentialsNonExpired = true;
        boolean accountNonLocked = true;
        List
   
   
    
     authorities = new ArrayList
    
    
     
     ();
        if (null == dbUser) {
            throw new UsernameNotFoundException("User does not exits");
        } else {
            if (dbUser.getLocked()) {
                accountNonLocked = false;
            }
        }

        return new User(userName, dbUser.getPasswd(), enabled, accountNonExpired, credentialsNonExpired,
                accountNonLocked, authorities);

    }
}

    
    
   
   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值