Struts2结合注释实现简易权限管理 抛板砖引玉
来源:互联网 发布:淘宝国产手办店铺 编辑:程序博客网 时间:2024/05/01 22:10
权限管理一直是一个比较头疼的问题。
现在实现的也只是功能权限的问题。
用户 -->角色-->权限。
一般设置权限都是用 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.测试
达到预期效果,收工!
- Struts2结合注释实现简易权限管理 抛板砖引玉
- 通过struts2拦截器实现权限管理
- Struts2的interceptor实现权限管理
- struts2的interceptor实现权限管理
- Struts2实现简易登录
- 简易Struts2登录实现
- shiro权限管理简易整理
- 框架之struts2实现简易学生管理系统(struts2文件上传、分层)
- struts2中利用拦截器实现权限管理
- [WinForm]WinForm之简易权限管理
- Struts2实现权限控制
- struts2实现权限拦截
- 【Struts2进阶】Struts2拦截器实现基于Url的权限管理
- IOS实现简易进销存管理
- Struts2拦截器实现日志管理系统 (同理实现权限,模块点击计数器等)
- 基于spring+struts2+ibatis+OperaMasks实现的小系统(实现权限管理和动态开发)
- SSM实现权限管理
- 权限管理实现
- 【转】windows窗口风格
- 与公司共勉
- 成为Java软件工程师途径之分析
- 《Windows API巡礼》---listen、accept和connect
- java_web需要哪些技术
- Struts2结合注释实现简易权限管理 抛板砖引玉
- java中 interger自动装箱拆箱
- 成为Java软件工程师最佳途径
- Struts2的Annotation使用
- 厌恶!!!
- 为什么在头文件中有extern "C" ?
- linux串口编程
- eclipse.ini中改为这个可以解决启不来,报什么内存错误的问题
- 生成随机数