Struts2结合注释实现简易权限管理 抛板砖引玉

xielittle 2010-01-08 03:36:47
权限管理一直是一个比较头疼的问题。

现在实现的也只是功能权限的问题。

用户 -->角色-->权限。

一般设置权限都是用 url,可不可以转换一个方式呢,

由于Struts2实现的web系统中功能都是通过Action类中的方法体现,把Action方法当作一个资源,通过使用注释指明资源ID,可以通过资源ID找到角色,然后和用户的角色匹配。



废话不说了,直接上代码:

1.注释类

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Authentication {
String name() default "";
}

2.注释解析类

public class ParseAnnotation {
public static String parseAuthentication(Class<?> clazz, String methodName,
Class<?>... parameterTypes) throws NoSuchMethodException {
Method method = null;
try {
method = clazz.getMethod(methodName, parameterTypes);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
throw new NoSuchMethodException(methodName + "no existes");
}

if (method != null) {
Authentication authentication = method.getAnnotation(Authentication.class);
if (null != authentication)
return authentication.name();
}
return null;
}
}
/*
* 暂时限定获取方法异常时表示配置错误,换回null表示有权限,返回注释的内容则需要判断
*/



3.在Action的方法上面加注释

@Authentication(name="EDIT_ROLE_FUNC")
public String edit(){
BaseRole newBaseRole = this.privManageService.findRoleById(baseRole.getRoleId());
if (null != newBaseRole) {
newBaseRole.setRoleName(baseRole.getRoleName());
newBaseRole.setRoleDesc(baseRole.getRoleDesc());
newBaseRole.setValid(baseRole.getValid());
newBaseRole.setLastUpdDate(DateUtil.getCurdate());
this.privManageService.updateRole(newBaseRole);
this.addActionMessage(this.getText("common.msg.upd.success"));
}
else
this.addActionError(this.getText("common.msg.upd.fail"));
return Action.SUCCESS;
}

4.实现权限拦截器



public class AuthenticationInterceptor extends AbstractInterceptor {

private static final long serialVersionUID = -5480389361433900956L;

@Override
public String intercept(ActionInvocation invocation) throws Exception {
ActionProxy proxy = invocation.getProxy();
String methodName = proxy.getMethod();
Object action = proxy.getAction();
String auth = null;
try {
auth = ParseAnnotation.parseAuthentication(action.getClass(),methodName, null);

//action类的方法都是没有参数的
} catch (NoSuchMethodException e) {
e.printStackTrace();
return "noPriv";//配置全局的result
}
if (auth != null)
if (!"EDIT_ROLE_FUNC".equals(auth)) {
return "noPriv";
}//这里为了做测试,只是简单的比较,已经拿到了resource ID,去数据库里面匹配是很简单的。
return invocation.invoke();
}
}

5.测试

达到预期效果,收工!
...全文
287 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xielittle 2010-01-23
  • 打赏
  • 举报
回复
板砖抛了,没玉,

本来这样的实现是毫无意义的,只是提供一种思路,看看大家平时是什么搞的,可惜啊
SambaGao 2010-01-09
  • 打赏
  • 举报
回复
继续努力。
TzSword 2010-01-09
  • 打赏
  • 举报
回复
谢谢分享.......
qinfeng891030 2010-01-09
  • 打赏
  • 举报
回复
谢谢楼主
jessicway 2010-01-09
  • 打赏
  • 举报
回复
你要分发100分╮(╯▽╰)╭,看看我能得多少哈
bolink5 2010-01-08
  • 打赏
  • 举报
回复
首先学习了
然后,说下我以前做的权限,我定义了三张表,role表、power表、role和power关联表。
BigBird2012 2010-01-08
  • 打赏
  • 举报
回复
看不懂!
老张-AI 2010-01-08
  • 打赏
  • 举报
回复
路过
学习了
colin_pxx 2010-01-08
  • 打赏
  • 举报
回复
学习
sfywyq 2010-01-08
  • 打赏
  • 举报
回复
lz,有完整的权限控制的模块没?
有话的能发个到我邮箱不吗?
不管有没有先谢了。。
邮箱:sfywyq@163.com
wn_1985 2010-01-08
  • 打赏
  • 举报
回复
不明白你这样做究竟想要表达什么
烟雨鹏城 2010-01-08
  • 打赏
  • 举报
回复
jf
针对矿山运输车辆超载监管中长期存在的源头管控缺失、数据孤岛严重、人工执法覆盖面有限等突出问题,本方案构建了一套以矿山企业侧地磅和过车数据为核心数据源的智能监管体系。方案采用"感知层—传输层—平台层—应用层"四层总体架构,在矿山企业出入口部署地磅称重系统、车牌识别摄像机、视频监控及GPS/北斗电子围栏等感知设备,通过光纤专线与5G无线相结合的传输网络,将称重数据、过车图片、视频流和定位轨迹实时汇聚至数据中台。平台层基于PostgreSQL、TDengine、MinIO等多元存储和Flink流式计算引擎,实现数据接入、治理、计算与服务全链路支撑。应用层面向交警和运管部门,提供实时监控中心、超载智能三级预警、车辆轨迹追踪、多维数据分析、执法联动电子证据包生成、企业信用A/B/C/D四级评价等功能,并与交警六合一、运管综合执法、治超非现场执法等系统深度对接,打通跨部门数据壁垒。方案遵循源头治理、数据驱动、部门协同、安全可靠、适度超前、分步实施六大原则,按"一期试点—二期推广—三期深化"分步推进,建设周期12至14个月。预期实现超载检出率从20%提升至90%、执法响应从小时级缩短至分钟级、监管覆盖率100%,同时减少道路维修费用约30%、降低人工执法成本50%,为道路交通安全治理现代化提供可落地的技术路径。
代码下载链接: https://pan.quark.cn/s/73a448bd47e6 功能: 1、跨运营商统一缴费:提供对移动、联通、电信、网通等运营商的联合缴费服务,并包含手机号码办理及游戏点卡充值功能。 2、代理商体系管理:系统为代理商提供集中化的登录账号分配;各代理端可实现预存话费、佣金的综合结算,支持实时查询缴费账单与佣金状态,预存款自动计入系统。 3、数据迁移功能:系统内所有数据及操作日志均可导出为EXCEL格式文件。 4、资金流转安全防护:确保数据在传输环节的机密性;通过IP地址绑定及设备绑定机制,构建安全可靠的防护体系。 5、账户信息查询:支持查询缴费目标号码的机主身份信息、账户余额及欠费明细,可在缴费前后进行查询操作。 6、自主运营平台:采用独立服务器架构,不受第三方机构干预,具备界面定制能力,是运营商优选的缴费合作平台。 7、分级权限设置:系统可根据代理用户类型分配差异化的操作权限,包括缴费权限、查询权限及管理权限。 8、自动化运行机制:服务器实现全流程自动化无人值守操作,所有执行记录以黑匣子形式实时存档,确保永久可追溯。 9、数据容灾保障:服务器支持双机热备运行模式,两台主机部署于不同地理位置,任何单点故障不会引发数据丢失。 10、即时通讯系统:配备完善的实时消息通知功能,涵盖新订单提醒、处理结果通知、服务器公告推送及代理商内部通讯。 11、语音验证流程:用户缴费时将触发语音二次确认环节;通过语音提示完成验证操作。 12、号码输入优化:缴费流程支持手动输入目标号码,降低输入错误风险。 政策: 平台具备全国范围的运营资质,对于希望进入代理行业但缺乏经验的用户,本平台是理想选择。签订正式合作协议后,公司将提供上门安装指导及系统操作培训,并定制符...

67,535

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧