springmvc的拦截器

public class LoginInterceptor implements HandlerInterceptor {

    
    /**
     * 进行action方法之前执行,在此方法实现身份认证拦截
     */
    @Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {
        
        //获取session
        HttpSession session = request.getSession();
        //用户身份信息
        ActiveUser activeUser = (ActiveUser)session.getAttribute(Config.ACTIVEUSER_KEY);
        if(activeUser!=null){//表示用户已登录
            return true;//放行继续访问
        }
        //获取用户请求的url
        String url = request.getRequestURI();
        //例如:/project/first.action
        
        //判断url是否属于公开地址,如果是公开地址放行
        //获取公开地址
        List<String> openurl_list = ResourcesUtil.gekeyList(Config.ANONYMOUS_ACTIONS);
        
        //校验请求的url是否在公开地址内
        for(String open_url:openurl_list){
            if(url.indexOf(open_url)>=0){
                return true;
            }
        }
        //挑战到登录页面
        request.getRequestDispatcher("/WEB-INF/jsp/base/login.jsp").forward(request, response);
        
        return false;
    }

    /**
     * 执行action方法返回视图之前执行
     */
    @Override
    public void postHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        // 根据个性化需求对view进行重新编辑,从而返回浏览器
        
    }

    /**
     * 执行action方法完成执行此方法
     */
    @Override
    public void afterCompletion(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        // 在这个方法记录操作日志 
        
    }

}
public class PermissionInterceptor implements HandlerInterceptor {

    /**
     * 权限拦截方法
     */
    @Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {

        //校验用户请求的地址是否是公开地址
        //获取用户请求的url
        String url = request.getRequestURI();
        //例如:/project/first.action
        
        //判断url是否属于公开地址,如果是公开地址放行
        //获取公开地址
        List<String> openurl_list = ResourcesUtil.gekeyList(Config.ANONYMOUS_ACTIONS);
        
        //校验请求的url是否在公开地址内
        for(String open_url:openurl_list){
            if(url.indexOf(open_url)>=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;
    }

    @Override
    public void postHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void afterCompletion(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        // TODO Auto-generated method stub
        
    }
    
}

 

posted @ 2016-07-04 14:14  沙漠里的小鱼  阅读(212)  评论(0编辑  收藏  举报