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页面显示错误信息?