light-commons加入AuthFilter(权限框架)

本文介绍了一种轻量级的权限管理系统,该系统作为light-commons的一部分,提供了独立于IOC容器的认证和授权功能。文章详细阐述了如何配置AuthFilter进行用户验证,并通过实例展示了如何设置不受权限控制的页面、登录页面以及权限密钥。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

把权限放在light-commons里面,犹豫了,但最终还是决定放进去。light-commons 提供的是一个轻量的工具集,权限这个常常涉及到的问题理应考虑进去。

有人问及light-commons与jakarta-commons有什么区别?开始,这个问题我自己也没有想清楚。通过几次对light-commons的更新,我找到了light-commons的定位,它是一个anti-spring-api,它与spring在同一层级,而不是与Jakarta-commons在同一层级。

spring 使用 spring-ioc 框架,以spring-bean的形式封装了诸多“拿来就用”的类。但这些类是依赖于spring-ioc运行的。

Jakarta-commons显然是提供更微粒度的封装,而我们日常只能用20%都不到的功能。

light-commons的封装是比较粗粒度的,同样旨在提供“拿来就用”的类,但这些类不需要依赖于ioc容器,是独立的,由使用者决定在何处用何种形式来调用它。当然,它也可以被用在spring架构的项目中。

最近在论坛里看到jquery和prototype之争,感觉spring的处理方式就好像jquery,实现了一个“扩展框架”,而light-commons则像prototype,只是提供了一个“API”。显然,在喜好上,还没有定论。

我在07年6月发过一个帖子[url=http://www.iteye.com/post/349245?page=1]《spring=画蛇添足》[/url](被全民公投先精华后隐藏了,已经1年了,时间过得真快),虽然当时的想法有些绝对,但是我真的很想用朴素的代码来编程,即便不了解所依赖的第三方项目,通过类名、变量名、方法名就可以读懂代码。对象工厂,Context,yes,but why must spring?

扯的有些远了,来说新加入的AuthFilter吧。
AuthFilter是1年多前写的代码,这次open到light-commons中,希望能对大家有所帮助,也希望能够得到大家的反馈。

[b]先介绍核心类AuthManager。[/b]
[quote]AuthManager 下是全静态方法,采用threadlocal实现。
AuthManager.login(IUser user) -- 用户登录
AuthManager.logout() -- 用户登出
AuthManager.getAuthentication() -- 获取证书
AuthManager.getUser() -- 获取当前登录用户(返回IUser对象)[/quote]

[b]另外还有一个重要的接口IUser[/b]
public interface IUser {
//获取用户被赋予的所有PermissionKeys
Set<String> getPermissionKeys();
//是否超级用户(可访问所有页面)
boolean isSuperUser();
}


接下来就可以动手了
当然首先要在web.xml中[b]加入filter的定义[/b],一般放在第一个过滤位置:
<filter>
<filter-name>light-auth</filter-name>
<filter-class>org.lightcommons.web.auth.AuthFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>light-auth</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


其次是在 classpath 中[b]加入 auth.properties[/b]
[quote]#不受框架限制的页面
page.ignores=/;/js/*;/images/*;/verify
#登录页面,在未登陆状态请求了无权访问的页面则跳转至登录页面,并将最后一次访问的网址放入 lasturl=xxxx以便跳回
page.login=/login.html
#无权访问的页面url,在已登录状态,访问了无权访问的页面则跳转至 denied页面
page.denied=/denied.action

#PermissionKey 定义
auth.user.view=/user/view;/user/list;
auth.user.modify=/user/new;/user/save;/user/edit;/user/update;
auth.user.delete=/user/delete[/quote]

[b]然后,修改User的model,使其implement IUser。[/b]

最后,编写verify action, 在 verify方法中验证用户名、密码(这个只能自己动手了),验证成功则[b]调用 AuthManager.login(someuser);[/b]

比如,用户如拥有 user.view 这个permissionKey,则可访问 /user/view 和 /user/list 2 个页面,如果没有这个permissionkey,则不能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值