J2EE/EJB 论坛 / XForum 里用 Filter 编程实现安全访问控制 |
cinc 2003.03.11, 15个回复, 1745次浏览 |
在 J2ee 里,实现安全有两种: 用声明实现安全,就是在 web.xml 里实现安全限制。 用编程实现安全,自己写代码 在 XForum 里,我们没有让 container 来管理安全检查,我们使用的是自己编程实现的: 用户登陆后,把用户的信息存放在 session 里,通过检查 session 中的用户信息,就可以 知道用户是否登陆成功了。 XForum 以前的版本里,这个检查过程是在分散在每个被保护的页面里做的,比如: 在 ViewMyThreadAction 里: final HttpSession session = request.getSession(); // If the user is null which means the user has not loged in, // forward it to logon screen if( userId == null || userId.length() == 0 ){ final String url = "/viewMyThreads.go"; request.setAttribute( ForumConstants.DEST_URL, url ); return (mapping.findForward("logon")); // Else display the user's threads }else{ 。。。 如果用户没有登陆,把当前页面存放在 session 中,转到 logon 页面让用户登陆。 在 XForum 新版本里,我们用了 Filter 技术做集中的 acl 控制: AclFilter 首先,把需要包含的页面存放在一个 acl-config.xml 里: |
用 application 还是 container 管理安全确实是 J2EE 程序设计时需要好好考虑的问题 XForum 的 Filter 其实是参照 Sun Pet Store 的 SignonFilter 简化改写的 在 Pet Store 的文档里有很大一段篇幅是来讲 SignonFilter 的,有兴趣的可以看看: All users in the pet store are logged in as the same system user, so they all have the same system permissions, such as whether or not they can execute a certain method. Application permissions, such as who can create an order (registered users only), are modelled and controlled at the application level. Casual users such as the shoppers in the pet store do not have to authenticate their real-life identity in any way. In such cases, it's usually preferable to manage users in the application layer instead of at the system layer. Users with special permissions, such as system or application administrators, are usually best represented by system users, using the J2EE login mechanisms mentioned above. ftp://210.52.88.133/pub/doc/java/j2ee/petstore/sample-app1.3.1.pdf |
|||
回应这个帖子 |