求大侠给个J2EE的权限管理例子 最近想研究下 J2EE的后台权限管理 由 用户 角色 权限这三张主表组成的关系,求指导,最好能给个简单点的 filter 的例子JavaEE管理 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我没用fiter,我用的struts2的拦截器,不过也差不多吧。我是这样做的,用配置文件XML来配置每个请求(action)的对应的权限值,然后你可以在fiter中拿到该用户对应的权限,然后与这配置文件的权限值比较,有就通过,没有就打回去。。 这个没必要使用过滤器吧,使用拦截器就行,定义好每个权限的拦截器代码,在每个action中加入拦截器,去拦截判断该用户是否有权限,如果没有返回到权限错误,例子如下:public String intercept(ActionInvocation invocation) throws Exception { ActionContext context = invocation.getInvocationContext(); Map<String, Object> session = context.getSession(); String roleId = (String) session.get(Constants.ADMINSESSIONROLEID); if(roleId == null || "".equals(roleId)) { return "error_adminLogin"; } else if(roleId.equals("***") || roleId.equals("***")) {//***代表角色权限 return invocation.invoke(); } else { return "error_403"; } }只不过这样的话,代码有点冗余,要根据每个action哪些用户需要访问来加拦截器,如果考虑不周到就会出来权限不够 这样确实比较好一些,便于扩展,我们公司是把 权限对应的URL 一起存入数据库中,和你的也差不多, 能否给个例子学习下 package com.zjlolife.sysIm.util.interceptor;import java.util.List;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;import com.zjlolife.sysIm.role.domain.Function;import com.zjlolife.sysIm.userManager.domain.User;import com.zjlolife.sysIm.util.ActionPrivilege;import com.zjlolife.sysIm.util.ActionPrivilegesReader;import com.zjlolife.sysIm.util.BeanFactory;import com.zjlolife.sysIm.util.privilege.service.PrivilegeService;public class CheckPrivilegeInterceptor extends AbstractInterceptor { @Override public String intercept(ActionInvocation invocation) throws Exception { User user = (User) ServletActionContext.getRequest().getSession() .getAttribute("loginUser"); ActionContext context = invocation.getInvocationContext(); String actionName = context.getName(); if(actionName.equals("loginPro")) { return invocation.invoke(); } //读取配置文件XML该action(请求)的对应的权限值 List<ActionPrivilege> actionPrivileges = ActionPrivilegesReader .getInstance().getPrivilegesList(); PrivilegeService privilegeService = (PrivilegeService) BeanFactory .getInstance().getBean(PrivilegeService.class); //获取数据库每个用户对应的权限 List<Function> functions = privilegeService.getFunctions(user.getId()); String functionId = null; for (ActionPrivilege actionPrivilege : actionPrivileges) { if (actionPrivilege.getActionName().equals(actionName)) { functionId = actionPrivilege.getValue(); break; } } if(functionId==null) { return invocation.invoke(); } Function function = new Function(); function.setFunctionId(functionId); if (functions.contains(function)) { return invocation.invoke(); } else { return "checkFailed"; } }}给你看下这个拦截器的代码,重点就是这了,每个权限对应一个url,差不多吧。我说下,这个你既然知道怎么做了,就自己动手丰衣足食,别懒。 来我的博客,下载我的那个security项目实例,里面有完成的权限控制管理 这样确实比较好一些,便于扩展,我们公司是把 权限对应的URL 一起存入数据库中,和你的也差不多, 能否给个例子学习下不错你这个写的简单些,主要是我们公司项目里有这个部分,我觉得应该研究下,但是公司的项目写的有点复杂,又没有注释 看不下去 !! 嘿嘿谢了!! JAVA字符编码问题 跪求,SSH框架 action 接不到JSP页面的值 js向session传值 怎么打开打开方式windows 外壳公用 dll的文件夹 Java电信网管请教 堆栈问题 web.xml中的servlet-mapping 大家对这个问题有什么好点子么?(客户要能自定义界面) 我要做一个新闻评论 需要过滤字符 应该怎么样做 关于自己写的JDBC事物控制,交给spring aop管理的问题 collection is not associated with any session JPA where in查询的问题
public String intercept(ActionInvocation invocation) throws Exception {
ActionContext context = invocation.getInvocationContext();
Map<String, Object> session = context.getSession();
String roleId = (String) session.get(Constants.ADMINSESSIONROLEID);
if(roleId == null || "".equals(roleId)) {
return "error_adminLogin";
} else if(roleId.equals("***") || roleId.equals("***")) {//***代表角色权限
return invocation.invoke();
} else {
return "error_403";
}
}只不过这样的话,代码有点冗余,要根据每个action哪些用户需要访问来加拦截器,如果考虑不周到就会出来权限不够
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.zjlolife.sysIm.role.domain.Function;
import com.zjlolife.sysIm.userManager.domain.User;
import com.zjlolife.sysIm.util.ActionPrivilege;
import com.zjlolife.sysIm.util.ActionPrivilegesReader;
import com.zjlolife.sysIm.util.BeanFactory;
import com.zjlolife.sysIm.util.privilege.service.PrivilegeService;public class CheckPrivilegeInterceptor extends AbstractInterceptor { @Override
public String intercept(ActionInvocation invocation) throws Exception {
User user = (User) ServletActionContext.getRequest().getSession()
.getAttribute("loginUser");
ActionContext context = invocation.getInvocationContext();
String actionName = context.getName();
if(actionName.equals("loginPro")) {
return invocation.invoke();
}
//读取配置文件XML该action(请求)的对应的权限值
List<ActionPrivilege> actionPrivileges = ActionPrivilegesReader
.getInstance().getPrivilegesList();
PrivilegeService privilegeService = (PrivilegeService) BeanFactory
.getInstance().getBean(PrivilegeService.class);
//获取数据库每个用户对应的权限
List<Function> functions = privilegeService.getFunctions(user.getId());
String functionId = null;
for (ActionPrivilege actionPrivilege : actionPrivileges) {
if (actionPrivilege.getActionName().equals(actionName)) {
functionId = actionPrivilege.getValue();
break;
}
}
if(functionId==null) {
return invocation.invoke();
}
Function function = new Function();
function.setFunctionId(functionId);
if (functions.contains(function)) {
return invocation.invoke();
} else {
return "checkFailed";
}
}}给你看下这个拦截器的代码,重点就是这了,每个权限对应一个url,差不多吧。我说下,这个你既然知道怎么做了,就自己动手丰衣足食,别懒。
不错你这个写的简单些,主要是我们公司项目里有这个部分,我觉得应该研究下,但是公司的项目写的有点复杂,又没有注释 看不下去 !! 嘿嘿谢了!!