转帖请标明此处地址:http://blog.csdn.net/FENGUFO/category/463623.aspx
此篇主要说一下 seam-security.jar,估计一次写不完,需分多个文件。本人也是第一次用,不当之处望指出。
应用程序安全占JAVA应用程序开发很大的比重,使用第三方的安全模块,总的来说用好了会节省很多时间,当然自己写安全验证的也可以,写一个好的需要花很多时间。当然如果只做一下简单的Session验证不在此列。来看看seam-security.jar是怎么写的。
导入seam-security.jar
本来导入没什么好说的,可我一导入JAR,程序启动立即报错,很是无语。
原因:seam-3.0.0.Final版本中的seam-security.jar/META-INFO目录中自带一个beans.xml,已经有如下内容
解决办法那就删除我的Beans.xml中的相同内容了,谁叫别人是原包JAR呢(删JAR中的也可以啦)。哈哈。
安全拦截配置
在自己的Beans.xml中添加,刚说了有冲突的那个配置,是不是Seam3实际是想导入这个配置呀,结果搞错了。默认导入个事务拦截好像有点说不过去。
用户认证
Identity
org.jboss.seam.security.Identity接口,主要实现用户认证、权限添加、权限检查是安全模块的核心接口,
org.jboss.seam.security.IdentityImpl类,是该接口的默认实现。该类的属性标记为
@Named("identity") @SessionScoped,表明上下文名称是"identity",存在范围为session生命周期中。
(本人实际的学习经验是,没有好的参考资料时,看官方那简单的帮助说明,还不如看源代码来的快些)
用户登录表单提交登录调用该接口方法
String login();
所以用户自己的登录表单会是下面的样子。
上面表单中登录按钮绑定为 #{identity.login} ,那credentials是什么呢,下面说明
Credentials
org.jboss.seam.security.Credentials接口,存放着用户登录的信息,用户名,密码。
org.jboss.seam.security.CredentialsImpl是它的默认实现。上下文名称为credentials,上面表单绑定的用户名和密码就在这里
默认的只提供用户名和密码,当然需要添加其它的登录信息,如验证码可以扩展此类,或直接实现接口。
现在知道登陆的用户信息在Credentials,表单提交方法是 Identity.login(),我们自己的认证信息写在哪里呢?
关键还是login()方法,login()调用会去查询自己类中的Authenticator接口,我们自己的认证信息就写Authenticator接口的
authenticate()方法中,当然首先要对 IdentityImpl类中注册用户自己对Authenticator接口的实现类,这个需要修改配置文件
还是按照前面的配置文件路径 /src/meta-info/seam-beans.xml,类名称是这里是DaoAuthencaicator。
@Named
public class DaoAuthenticator implements Authenticator 类定义,并实现其中的几个接口
最关键的是 authenticate() 接口,下面是参考代码。
验证成功设置用户类及登陆状态SUCCESS,用户类需要实现一个 jboss-picketlink-idm 接口(这个后续再详细说明)
到此用户认真就完成了。下一篇说下 资源授权。