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

 

 

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

 

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

拦截器思路如下:

052医疗项目-模块五:权限设置-拦截器的编写

 

 我们用的是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,但是因为你没有那个权限所以也是不能登录的。

 

相关文章:

  • 2021-09-03
  • 2022-12-23
  • 2021-07-02
  • 2022-01-31
  • 2021-09-01
  • 2021-12-05
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案