springsecurity3实现的过程
1.在类初始化的时候,InvocationSecurityMetadataSource类就会调用loadResourceDefine()的方法,取到所用的资源对应的角色关系。(这个步骤是在Tomcat容器启动的时候调用的)
2.当用户访问某个资源时,提交的url就会被我们自定义的过滤器(MyFilterSecurityInterceptor)
拦截,进入doFilter()的方法,在调用该方法前,会执行InterceptorStatusToken token = super.beforeInvocation(fi),当执行这行代码时,会进入InvocationSecurityMetadataSource类的另一个方法getAttributes(Object object),该方法返回的是某个资源对应的权限集合(比如说/index.jsp所对应的权限是ROLE_USER),参数object可以理解为一个url。
3.在得到某个资源对应的权限集合后,就会进入AccessDecisionManager类的decide()方法,首先得到资源的权限,然后得到用户的权限,判断用户是否具有该资源的权限,有的就放行,没的就返回登入页面或抛出一个无权限的异常。
4.当用户通过登入页面提交表单时,进入到UserDetailsService类的loadUserByUsername()方法,并把用户名当参数传入,如果取到了用户的权限,则经过自定义的过滤器,做上面2和3的步骤。
5.进入登入页面后,用户每当点击一个资源,都要经过过滤器拦截,判断是否具有访问该资源的权限,有的就放行,没的就跳入权限受阻的页面,这样就差不多欧了
相关文章