权限过滤器

1.web.xml 文件配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter-name>PermissionFilter</filter-name>
<filter-class>com.filter.PermissionFilter</filter-class>
<init-param>
<param-name>arrLogin</param-name>
<param-value>login.jsp;login!login.action</param-value>
</init-param>
<init-param>
<param-name>arrFrame</param-name>
<param-value>test!test.action</param-value>
</init-param>
<init-param>
<param-name>arrPortal</param-name>
<param-value>index.jsp;exceptions;</param-value>
</init-param>
<init-param>
<param-name>noSession</param-name>
<param-value>/exceptions/errorinfo.jsp?ERROR_CODE=1</param-value>
</init-param>
<init-param>
<param-name>noPermission</param-name>
<param-value>/exceptions/errorinfo.jsp?ERROR_CODE=2</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>PermissionFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>PermissionFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>
2.根据 菜单权限查询角色
public class Permission extends HibernateDaoSupport
{
    /**
     *JDBC操作模板
     */
    protected JdbcTemplate jdbcTemplate;
    private Map permisstionMap = new HashMap() ;
    public void loadPermissions(){
      //加载菜单所对应的权限
      String sql ="select t.node_url,r.role_id from tb_trees_menus t, tb_roles_trees r where "
              +" t.node_id = r.node_id  and t.node_url is not null and t.node_url <>'' "
              +"group by t.node_url,r.role_id ";
      List list = this.jdbcTemplate.queryForList(sql);
      Map map = new HashMap();
      for(int i=0;i<list.size();i++){
          Map node = (Map) list.get(i);
          map.put(node.get("node_url"), node.get("role_id"));
      }
      this.permisstionMap = map;
    }
    public Map getPermisstionMap() {
        return permisstionMap;
    }
    public void setPermisstionMap(Map permisstionMap)
    {
        this.permisstionMap = permisstionMap;
    }
}
3.过滤处理
public class PermissionFilter implements Filter {
    // 允许访问的资源
    private String[] arrLogin, arrFrame, arrPortal;
    //会话失效
    private String  noSession ;
    //没权限
    private String noPermission;
    //日志记录器
    private Logger log = Logger.getLogger(PermissionFilter.class);
    public void destroy() {
    }
    @SuppressWarnings("deprecation")
    public void doFilter(ServletRequest arg0, ServletResponse arg1,
            FilterChain arg2) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) arg0;
        HttpServletResponse response = (HttpServletResponse) arg1;
        UserInfo user = (UserInfo) request.getSession().getAttribute("user");
        String requestUrl = request.getRequestURI();
        if(user==null){
            user = (UserInfo) request.getSession().getAttribute("user");
        }
        String request_ip = request.getLocalAddr();
        String contextPath = request.getContextPath();
        /**
         * 如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在ServletRequest中
         * 无法得到的方法,就要把此request对象构造成HttpServletRequest
         */
        if(user==null){
            if(!requestUrl.equals(Constants.WEBROOT)&&!isContains(requestUrl, arrLogin))
            {
                request.getRequestDispatcher(noSession).forward(request, response);
                return;
            }
        }else if(requestUrl.indexOf(".action")!=-1&&requestUrl.length()>Constants.WEBROOT.length())
        {
            String role_ids = user.getRoleIds();
            String realURI = requestUrl.substring(Constants.WEBROOT.length());
            if(!hasPermission(role_ids, realURI)){
                request.getRequestDispatcher(noSession).forward(request, response);
                return ;
            }
        }else if(requestUrl.indexOf(".jsp")!=-1&&requestUrl.length()>Constants.WEBROOT.length())
        {
            String role_ids = user.getRoleIds();
            String realURI = requestUrl.substring(Constants.WEBROOT.length());
            if(!hasPermission(role_ids, realURI)){
                request.getRequestDispatcher(noSession).forward(request, response);
                return ;
            }
        }
        response.addHeader("P3P", "CP=CAO PSA OUR");
        arg2.doFilter(arg0, arg1);
    }
    /**
    /*加载web.xml文件中配置信息
    /*
    public void init(FilterConfig config) throws ServletException {
        String arrLogins = config.getInitParameter("arrLogin");
        if(arrLogins!=null){
            this.arrLogin = arrLogins.split(";");
        }else{
            this.arrLogin = new String[0];
        }
        String arrFrames = config.getInitParameter("arrFrame");
        if(arrLogins!=null){
            this.arrFrame = arrFrames.split(";");
        }else{
            this.arrFrame = new String[0];
        }
        String arrPortals = config.getInitParameter("arrPortal");
        if(arrLogins!=null){
            this.arrPortal = arrPortals.split(";");
        }else{
            this.arrPortal = new String[0];
        }
        this.noSession = config.getInitParameter("noSession");
        this.noPermission = config.getInitParameter("noPermission");
    }
    public boolean isContains(String requestUrl,String regx[]){
        boolean result = false;
        for(int i=0;i<regx.length;i++){
            if(requestUrl.indexOf(regx[i])!=-1){
                result = true;
                break;
            }
        }
        return result;
    }

    /**
    /* 判断角色权限
    /*
    public boolean hasPermission(String roles,String node_url){
        boolean result = false;
        Permission ps = new Permission();
        Map permissionMap = ps.getPermisstionMap();                               //数据库中获取菜单权限的角色信息
        String url_role_ids = (String) permissionMap.get(node_url);         //当前用户的权限信息
        String user_role_ids = roles;
        if(url_role_ids==null){
            return true;
        }
        String[] arr_url_role = url_role_ids.split(",");
        String[] arr_user_role = user_role_ids.split(",");
        for(int i=0;i<arr_url_role.length;i++){
            for(int j=0;j<arr_user_role.length;j++){
                if(arr_url_role[i].equals(arr_user_role[j])){
                    return true;
                }
            }
        }
        return result;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值