认证
用户登陆,会被AuthenticationProcessingFilter拦截,调用AuthenticationManager的实现,而且AuthenticationManager会调用ProviderManager来获取用户验证信息(用户信息获取下面会讲),如果验证通过后会将用户的权限信息封装一个User放到spring的全局缓存SecurityContextHolder中,以备后面访问资源时使用。
而验证通过的过程,
通过从AuthenticationProcessingFilter,我们不难找到过滤器实现具体类<之后会讲SS4加载过程>UsernamePasswordAuthenticationFilter:
GenericFilterBean
AbstractAuthenticationProcessingFilter
下的UsernamePasswordAuthenticationFilter<过滤器实现具体类>
本文http://www.paymoon.com:8001/index.php/2016/12/07/how-ss4-apply-the-permission/ 如果转载请联系i@paymoon.com如图:
SecurityAuthenticationFilter就是自己实现了UsernamePasswordAuthenticationFilter的过滤器,
我们通过UsernamePasswordAuthenticationFilter类和其父类,也会到
private String usernameParameter = "username";
private String passwordParameter = "password";
最终我们通过successfulAuthentication方法,找到了AbstractAuthenticationProcessingFilter
AuthenticationSuccessHandler<认证成功后跳转>
AuthenticationFailureHandler<失败后跳转>
本文http://www.paymoon.com:8001/index.php/2016/12/07/how-ss4-apply-the-permission/ 如果转载请联系i@paymoon.com授权
Spring Security称受保护的应用资源为“安全对象”,这包括URL资源和业务类方法。spring AOP中有前置advice(处理、拦截器、通知)、后置advice 、异常advice和环绕advice 。Acegi使用环绕advice对安全对象进行保护。 Acegi通AbstractSecurityInterceptor为安全对象访问提供一致的工作模型,它按照以下流程进行工作:
1. 从SecurityContext中取出已经认证过的Authentication(包括权限信息);
2. 通过反射机制,根据目标安全对象和“配置属性”得到访问目标安全对象所需的权限;
3. AccessDecisionManager根据Authentication的授权信息和目标安全对象所需权限做出是否有权访问的判断。如果无权访问,Acegi将抛出AccessDeniedException异常,否则到下一步;
4. 访问安全对象并获取结果(返回值或HTTP响应);
5. AbstractSecurityInterceptor可以在结果返回前进行处理:更改结果或抛出异常。
本文http://www.paymoon.com:8001/index.php/2016/12/07/how-ss4-apply-the-permission/ 如果转载请联系i@paymoon.com