XForum 里用 Filter 编程实现安全访问控制

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 里:

<protected-resource> <uri>post.go</uri> <desc>Post Thread Form</desc> </protected-resource> <protected-resource> <uri>viewMyThreads.go</uri> <desc>View My Thread</desc> </protected-resource> </acl-config> 在 web.xml ,对每个 web resource 都应用 这个 Filter: <filter> <filter-name>AclFilter</filter-name> <filter-class>org.redsoft.forum.filters.AclFilter</filter-class> </filter> <filter-mapping> <filter-name>AclFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 在 AclFilter 的 doFilter 方法里检查:如果请求的 uri 是 protected resource,而且 session 中没有用户信息,就转向到 logon 页面 这样,如果以后要添加保护页面,只需要在 acl-config.xml 里加上一个 protected-resource 就可以了,而且也可以保护静态页面(.html 的页面)动态页面里的代码由于少了检查用户登陆的代码,也清晰了很多。 :)




目前还实现不了,现在只有两个角色:
  guest 用户:不能访问 protected resource
  登陆  用户:可以访问所有的资源

不过在现有的 acl-config.xml 的基础上加以修改应该可以实现,可以定义几个 role
比如 guest, user, manager,然后修改 acl-config.xml 如下:

    <protected-resource>
        <uri>post.go</uri>
        <desc>Post Thread Form</desc>
        <role>manager,user</role>
    </protected-resource>

实现复杂的 acl 控制


使用filter是个好办法,tomcat曾经使用安全拦截部件Security Interuptor
(org.apache.tomcat.request.SecurityCheck)来实现web.xml中申明的资源授权。

我们完全可以参考这个类来实现自己的安全过滤器(使用JNDI或JDBC资源)。
而读取的是web.xml中的资源配置信息。这样就非常灵活了。

web.xml的配置并不需要在java中写上角色名的问题,改动角色名不需要修改代码。这
是servlet规范中的一段原文:<SRV12.3>
For example, to map the security role reference "FOO" to the security role
with role-name "manager" the syntax would be:
 <security-role-ref>
   <role-name>FOO</role-name>
   <role-link>manager</manager>
 </security-role-ref>
In this case if the servlet called by a user belonging to the "manager'
securiyt role made the API call isUserInRole("FOO") would be true.

那么,在程序中只要写明FOO,使用role-link可以将其他角色也视为同义词。


用 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
回应这个帖子



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/408357.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

进制转换,写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。 数据范围:保证结果在 1≤n≤2的31次方-1

题目&#xff1a;进制转换 写出一个程序&#xff0c;接受一个十六进制的数&#xff0c;输出该数值的十进制表示。 数据范围&#xff1a;保证结果在 1≤n≤2的31次方-1 代码实现&#xff1a; import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 p…

Github|类别不平衡学习资源(下)

点击上方“算法猿的成长“&#xff0c;关注公众号&#xff0c;选择加“星标“或“置顶”总第 139 篇文章&#xff0c;本文大约 3600 字&#xff0c;阅读大约需要 10 分钟继续介绍类别不平衡学习资源&#xff0c;github 地址&#xff1a;https://github.com/ZhiningLiu1998/awes…

react学习(45)----react组件

定义组件最简单的方式就是编写 JavaScript 函数&#xff1a; function Welcome(props) {return <h1>Hello, {props.name}</h1>; } 该函数是一个有效的 React 组件&#xff0c;因为它接收唯一带有数据的 “props”&#xff08;代表属性&#xff09;对象与并返回一…

Github | 线稿自动上色

点击上方“算法猿的成长“&#xff0c;关注公众号&#xff0c;选择加“星标“或“置顶”总第 140 篇文章&#xff0c;本文大约 1500 字&#xff0c;阅读大约需要 5 分钟今天要介绍的是一个 Github 项目&#xff0c;项目地址如下&#xff0c;它实现了对线稿的自动上色功能&#…

react学习(46)----react渲染组件

const element <div />; 不过&#xff0c;React 元素也可以是用户自定义的组件&#xff1a; const element <Welcome name"Sara" />; 当 React 元素为用户自定义组件时&#xff0c;它会将 JSX 所接收的属性&#xff08;attributes&#xff09;以及子…

Microsoft好员工的十个标准

1、对自己所在公司或部门的产品具有起码的好奇心是极为重要的一点。你必须亲自使用该产品。对于身处计算机行业的人来说,这一点怎么强调都不为过。当然&#xff0c;这一点同样适用于其他知识密集型领域&#xff0c;因为在这些领域内技术与应用发展更新极快&#xff0c;对其技术…

如何在图片上添加文本信息

点击上方“算法猿的成长“&#xff0c;关注公众号&#xff0c;选择加“星标“或“置顶”总第 141 篇文章&#xff0c;本文大约 1500 字&#xff0c;阅读大约需要 5 分钟前言给图片添加文本信息是非常常见的需求&#xff0c;通常需要添加的文本信息分为中文文字或者是非中文的文…

react学习(47)----react中initialValue和value不能一起定义

<Row gutter{12}><Col span{12}><Form.Item label"活动开始时间">{getFieldDecorator(startTimeLong, {initialValue: popupByIdDetail.startTimeLong,rules: [{ required: true, message: 活动开始时间不能为空 }],})(<DatePickervalue{popupB…

Github|基于 Jittor 的 GAN 模型库

点击上方“算法猿的成长“&#xff0c;关注公众号&#xff0c;选择加“星标“或“置顶”总第 142 篇文章&#xff0c;本文大约 1300 字&#xff0c;阅读大约需要 5 分钟前言今天介绍一个 Github 项目---集成了 27 种 GAN 模型的 Jittor-GAN&#xff0c;项目地址&#xff1a;htt…

mongoDB分页的两种方法

mongoDB的分页查询是通过limit(),skip(),sort()这三个函数组合进行分页查询的 下面这个是我的测试数据 db.test.find().sort({"age":1}); 第一种方法 查询第一页的数据&#xff1a;db.test.find().sort({"age":1}).limit(2); 查询第二页的数据&#xff1a;…

react学习(48)--编辑回显用moment处理

<Row gutter{12}><Col span{12}><Form.Item label"活动结束时间">{getFieldDecorator(endTimeLong, {initialValue: [moment(popupByIdDetail.endTimeLong)],rules: [{ required: true, message: 活动结束时间不能为空 }],})(<DatePicker forma…

SPS用户管理的问题

当你在SPS中添加Active Diretory中的一个用户并给他授权后, 在Active Diretory中将该用户改名, 然后, 在SPS中就无法对刚才添加的用户进行操作, 删除、修改权限时&#xff0c;出现错误提示“Could not find user with corresponding SID in the domain. Check the spelling of…

22 款设计和可视化神经网络的工具

点击上方“算法猿的成长“&#xff0c;关注公众号&#xff0c;选择加“星标“或“置顶”总第 143 篇文章&#xff0c;本文大约 3000 字&#xff0c;阅读大约需要 10 分钟前言深度学习领域&#xff0c;最常见的就是各种网络模型&#xff0c;那么在写论文或者文章&#xff0c;介绍…

vim tutor summary

在终端输入vim tutor是最好的。。以下是我学习里边的课程的小总结&#xff1a; 经典的不多说&#xff1a; q! 退出      wq 退出并保存 <Esc> i A 编辑模式等的转换 (非编辑模式。编辑模式的话不就输入字符了~~囧~~&#xff09; 移动光标(move) 上下左右&#…

react学习(49)--参数判定

<div style{{ textAlign: center }}><Button type"primary" onClick{this.handleSubmit(false)} style{{ marginRight: 10px }}>保存</Button><Button oncllck{this.handleCancel} style{{ marginRight: 10px }}>取消</Button><But…

最近关注的一些东西

我现任职质量经理&#xff0c;负责一些质量和测试工作。下面是我关心的一些内容&#xff1a;工作相关软件质量 开发过程(RUP,XP)软件测试配置管理需求管理报表开发 个人兴趣SpringFramework设计模式PHPAsp.netwiki学习方法软件设计行进中的互联网赚钱的机会 2005.2.28

计算机视觉研究生文献和复现哪个更重要?

点击上方“算法猿的成长“&#xff0c;关注公众号&#xff0c;选择加“星标“或“置顶”总第 144 篇文章&#xff0c;本文大约 6000 字&#xff0c;阅读大约需要 15 分钟前言这是来自知乎上的一个问题&#xff0c;但我觉得应该是对很多初入深度学习领域&#xff0c;不只是计算机…

Flex4 初始化过慢解决方法

昨天找了个免费.net空间&#xff0c;想测试一下做的一个简单Flex4 上传项目的效果。上传所有文件到网站之后&#xff0c;访问项目页面&#xff0c;进度条一点一点艰难的向前移动&#xff0c;到了100%后却不出现程序界面&#xff0c;等待一会儿还是没有出现&#xff0c;于是我去…