实现基于url级别的权限控制

 很多系统只能控制到用户的菜单权限,而不能控制到用户直接输入url地址访问某些界面的权限,这个如何控制,比如用户张三没有菜单A(菜单A的action地址是:http://localhost:8080/xxx/xxx.do)的权限,用户直接输入这个地址却能访问这个界面。目前后很多的系统都存在这样的权限问题:

下面给出几种解决方法:
1.url过滤:直接加一个filter,判断该url是否是用户直接输入的权限(通过http请求头的referer属性。如果该属性为空,则说明是直接通过url直接访问的,该操作不能进行。)。当然这里要对例如首页或者登陆页面进行放行。过滤器的部分代码如下:

public void doFilter(ServletRequest request, ServletResponse response, 
            FilterChain chain) throws IOException, ServletException { 
        HttpServletRequest req = (HttpServletRequest) request; 
        HttpServletResponse resp = (HttpServletResponse) response; 
        String conString = ""; 
        conString = req.getHeader("REFERER");//获取父url--如果不是用户直接输入的话就是先前的访问过来的页面,要是用户输入了,这个父url是不存在的。该属性常称为防盗链属性  
        if("".equals(conString) || null==conString){ //判断如果上一个目录为空的话,说明是用户直接输入url访问的  
            String servletPath = req.getServletPath();//当前请求url,去掉几个可以直接访问的页面  
            if(servletPath.contains("index.jsp") || servletPath.contains("login.jsp")){ //跳过index.jsp和登陆Login.jsp  
                chain.doFilter(request, response); 
            } else { 
                resp.sendRedirect("index.jsp");//跳回首页  
            } 
        } else { 
            chain.doFilter(request, response); 
        } 
    } 

这种方法有一定的局限性。用户体验也不太好:如果该用户有该权限,也不能通过这种方式去访问了。
下面这种可以解决这个问题:
2.开发约定:
约定开发人员 在所有url的路径里都包含菜单id, 比如 http://localhost:8080/菜单/xxx.do这样在url过滤的地方就可以知道当前url是属于哪个菜单的 然后再看当前user有没有这个菜单的权限。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值