zoukankan      html  css  js  c++  java
  • 052医疗项目-模块五:权限设置-拦截器的编写

    我们现在写最后一步:拦截器。

    本文的思路就是用户在访问***.action时那个url是在自己的权限范围内的,不然拦截下来。

    用户权限管理是给用户分配好权限之后,用户只能登陆自己的权限,这么去保证呢?那就用用户的url去匹配,看是不是在用户分配的权限范围内。

    拦截器思路如下:

     我们用的是SpringMvc框架,配置拦截器的方法是写一个类继承HandlerInterception接口,然后里面有三个方法需要复写,然后在springmvc中配置这个拦截器。

    如下:

    package yycg.base.action.HandlerInterceptor;
    
    import java.util.List;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import org.springframework.web.bind.annotation.SessionAttributes;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import yycg.base.pojo.vo.ActiveUser;
    import yycg.base.pojo.vo.Operation;
    import yycg.base.process.context.Config;
    import yycg.util.ResourcesUtil;
    
    public class PermissionInterceptor implements HandlerInterceptor  {
        
        /**
         * 
         * 执行时间:进入到action方法之前,
         * 使用场景:用于用户的认证,用户的授权拦截。
         * 
         */
        
        @Override
        public boolean preHandle(HttpServletRequest request,
                HttpServletResponse response, Object handler) throws Exception {
        String url=request.getRequestURI();//得到用户请求的url地址
        /*
         * 判断这个地址是不是公开地址是的话就放行
         * 
         */
        
        List<String> open_urls=ResourcesUtil.gekeyList(Config.ANONYMOUS_ACTIONS);    
        for(String open_url:open_urls)
        {
            
            if(url.indexOf(open_url)>=0)//>=0说明找到位置了
            {
                return true;
            }
            
            
            
            
        }
            
            
            
        
        //校验是否是公共权限
        //获取公共权限 地址
        List<String> commonurl_list = ResourcesUtil.gekeyList(Config.COMMON_ACTIONS);
        //校验请求的url是否在公共权限地址内
        for(String common_url:commonurl_list){
            if(url.indexOf(common_url)>=0){
                return true;//如果是公共权限 地址则放行
            }
        }
        
        //是否是用户的操作权限
        //从session中拿到用户的操作权限
        //获取session
        HttpSession session = request.getSession();
        //用户身份信息
        ActiveUser activeUser = (ActiveUser)session.getAttribute(Config.ACTIVEUSER_KEY);
        List<Operation> operations = activeUser.getOperationList();
        
        //校验请求的url是否在用户操作权限地址内
        for(Operation operation_index:operations){
            String operation = operation_index.getActionUrl();
            if(url.indexOf(operation)>=0){
                return true;//如果是用户的操作权限 地址则放行
            }
        }
        
        //提示用户无此操作权限
        //跳转到无此操作权限操作页面
        request.getRequestDispatcher("/WEB-INF/jsp/base/refuse.jsp").forward(request, response);    
            
            
            
            return false;
        }
        /**
         * 执行的时机:进入到Action方法,在返回modelAndView之前执行。
         * 使用场景:在这里统一对返回的数据进行处理,比如统一添加菜单,导航等
    
         */
        @Override
        public void postHandle(HttpServletRequest request,
                HttpServletResponse response, Object handler,
                ModelAndView modelAndView) throws Exception {
            
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request,
                HttpServletResponse response, Object handler, Exception ex)
                throws Exception {
            
        }
    
    }

    最后在在springmvc.xml中配置权限。

    <!-- 用户权限的拦截 -->
       <mvc:interceptor>
       
          <mvc:mapping path="/**"/>
          <bean class="yycg.base.action.HandlerInterceptor.PermissionInterceptor"></bean>
       </mvc:interceptor>

    这样子的话,我们的权限控制就深入到底层了。

    不仅局限在菜单上的操作。因为如果只是局限在不同的用户登录,显示的左侧菜单不同这样话。其实用户在url里面直接输入地址还是可以操作别的用户菜单下的具体操作。

    但是采取我们这样做的话,就控制到到底层了。你在地址栏上输入一个别人的菜单下的url,但是因为你没有那个权限所以也是不能登录的。

  • 相关阅读:
    3. CSS 的复合选择器
    2. CSS文本属性
    1. CSS字体属性
    pm2 语法
    Emmet语法
    排序算法之 '归并排序'
    CCS
    CCS
    CCS
    怀旧编程之原生js实现简易导航栏
  • 原文地址:https://www.cnblogs.com/shenxiaoquan/p/6197586.html
Copyright © 2011-2022 走看看