最近想研究下  J2EE的后台权限管理  由 用户 角色 权限这三张主表组成的关系,求指导,最好能给个简单点的  filter 的例子JavaEE管理

解决方案 »

  1.   

    我没用fiter,我用的struts2的拦截器,不过也差不多吧。我是这样做的,用配置文件XML来配置每个请求(action)的对应的权限值,然后你可以在fiter中拿到该用户对应的权限,然后与这配置文件的权限值比较,有就通过,没有就打回去。。
      

  2.   

    这个没必要使用过滤器吧,使用拦截器就行,定义好每个权限的拦截器代码,在每个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哪些用户需要访问来加拦截器,如果考虑不周到就会出来权限不够
      

  3.   

    这样确实比较好一些,便于扩展,我们公司是把 权限对应的URL  一起存入数据库中,和你的也差不多, 能否给个例子学习下
      

  4.   

    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,差不多吧。我说下,这个你既然知道怎么做了,就自己动手丰衣足食,别懒。
      

  5.   

    来我的博客,下载我的那个security项目实例,里面有完成的权限控制管理
      

  6.   

    这样确实比较好一些,便于扩展,我们公司是把 权限对应的URL  一起存入数据库中,和你的也差不多, 能否给个例子学习下
    不错你这个写的简单些,主要是我们公司项目里有这个部分,我觉得应该研究下,但是公司的项目写的有点复杂,又没有注释  看不下去 !!   嘿嘿谢了!!