Quantcast
Channel: PayMoon贝明实验室
Viewing all articles
Browse latest Browse all 130

[SS4层面]SS4是如何把权限实现的原理

$
0
0
本文http://www.paymoon.com:8001/index.php/2016/12/07/how-ss4-apply-the-permission/ 如果转载请联系i@paymoon.com

认证

用户登陆,会被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

如图:

24implements Filter, BeanNameAware, EnvironmentAware, protected private final Set<String> requiredProperties; private FilterCon Servl private String b private Environm private ServletC public GenericFi this. logger this. require this. envi ron public final voi Type hierarchy of 'org.springframework.web.filter.Gen Object - java.lang GenericFilterBean - org.springframework.web.fi AbstractAuthenticationProcessingFilter - orc UsernamePasswordAuthenticationFilter SecurityAuthenticationFilter - com.up) SecurityAuthenticationFilter - com.up) SecurityAuthenticationFilter - com.up) AbstractPreAuthenticatedProcessingFilter J2eePreAuthenticatedProcessingFilter RequestHeaderAuthenticationFilter - org.

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对安全对象进行保护。 AcegiAbstractSecurityInterceptor为安全对象访问提供一致的工作模型,它按照以下流程进行工作:  

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


Viewing all articles
Browse latest Browse all 130

Trending Articles