学习《Spring in action 》第七章 Note.

 
AuthenticationProviderManager,
有ProviderManager必然就要有Provider了。Provider有好几种: DAO, Cas, Jaas, LDAP, Remote。
常用的DAO Provider需要
1) UserDetailService用于检索用户。Spring Security实现了一个memory的,一个JDBC的UserDetailService。
2) password Encoder设置。
3) catch设置。
 
AccessDecisionManager
authentication provider manager通过它管理的authentication provider验证了你是谁,而access decision manager通过其管理的voter决定你是否有权访问特定的资源。
 
Web filter
可以证明你是谁,你能访问什么之后。就需要把这两个功能实施到应用中去。对于web程序,很自然,是通过filter实现的。一共4个filter来完成保护web资源的问题。
1) 集成过滤器。    检索存储在session中的认证信息。
2) 认证处理过滤器。 处理用户的认证请求(含有用户名/密码)。
3) 例外转换过滤器。 出现安全exception后的拦截。比如转向登陆页面、提示没有权限。
4) 过滤器安全拦截器。  设置保护哪些资源。并且这个过滤器通过authentication provider manager,  access decision manager的帮助决定是否授予对保护资源的访问权限。
 
Spring 为了解决向web servlet fielter解决注入的问题,提供了两个filter proxy。一个用于单个的filter---FilterToBeanProxy,一个用于filter chain---FilterChainProxy. 
 
 JSP tag
<authz:authentication> 可以得到用户的信息。 
<authz:authorize>  可以得到用户的授权信息。
 
疑问:
对数据的保护?
web fileter只是提供了对url的权限控制,但是并没有对数据进行权限控制。比如,loadMyDetail.jsp?userId=2这URL就应该只能被uesrId=2的用户使用才对。但是如果只对loadMyDetail.jsp进行url配置,其他用户通过自己的授权却能够访问其他用户的信息。这问题不知道在ACEGI中是否有解决方案。
 
性能?
这么多的filter, provider, voter对性能的影响不知有多大?
 
如何在login页面显示错误信息?
   用户认证失败后要显示失败的原因。如果仅仅使用errorpage是做不到这点的。
    <bean id="accessDeniedHandle" class="org.springframework.security.ui.AccessDeniedHandlerImpl">
          <property name="errorPage" value="/loginError.jsp"/>
    </bean>
   需要使用 exception mapping:  http://forum.springframework.org/archive/index.php/t-12278.html

你可能感兴趣的:(spring,bean,Web,jsp,Acegi)