zoukankan      html  css  js  c++  java
  • Spring 拦截器配置

    1.编写拦截器,实现HandlerInterceptor接口

    package com.shareworx.interceptor;
    
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.alibaba.fastjson.JSONObject;
    import com.shareworx.platform.mvc.SessionContext;
    import com.shareworx.platform.mvc.ThreadLocalContextHolder;
    import com.shareworx.platform.util.SpringUtils;
    import com.shareworx.yjwy.login.commons.APPResultMsgCommons;
    import com.shareworx.yjwy.login.commons.LoginCommons;
    import com.shareworx.yjwy.login.service.IAPPLoginAuthorizationService;
    /**
     * 
     * @author zhenwei.shi
     * 用于处理APP请求拦截操作
     */
    public class APPHttpRequestInterceptor implements HandlerInterceptor {
        // 将不走监听的Action的url放进FILTERURIS
        private static final String[] FILTERURIS = new String[] { "/app/login","/app/isalready/login" };
        
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
                throws Exception {
            String requestUri = request.getRequestURI().substring(request.getContextPath().length());
            for (String uri : FILTERURIS) {
                if (requestUri.startsWith(uri)) {
                    return true;
                }
            }
            int validState = validateRequest(request);
            if (LoginCommons.SUCCESSCODE.equals(validState)) {
                return true;
            } else {
                JSONObject json = new JSONObject();
                json.put(APPResultMsgCommons.CODE, validState);
                String msg = "";
                if(LoginCommons.USEROTHORALREADYLOGIN.equals(validState)){
                    msg="用户已经在其他地点登录";
                }else if(LoginCommons.USERCOOKIEERROR.equals(validState)){
                    msg="请重新登录";
                }
                json.put(APPResultMsgCommons.MSG, msg);
                response.setContentType("application/json; charset=utf-8");
                response.getWriter().write(json.toJSONString());
                return false;
            }
        }
    
        @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 {
        }
    
        /**
         * 
         * @param request
         * @return
         */
        private Integer validateRequest(HttpServletRequest request) {
            IAPPLoginAuthorizationService service = SpringUtils.getBean(IAPPLoginAuthorizationService.ID);
            String sessionId="";
            String userName="";
            Cookie[] cookies = request.getCookies();
            if(null==cookies||cookies.length<1){
                return LoginCommons.USERCOOKIEERROR;
            }
            for(Cookie cookie : cookies){
                if(APPResultMsgCommons.LOGINCOOKIENAME.equals(cookie.getName())){
                    sessionId = cookie.getValue();
                }
                if(APPResultMsgCommons.LOGINUSERNAME.equals(cookie.getName())){
                    userName = cookie.getValue();
                }
            }
            if(service.isAlreadyLoginForSelf(sessionId)){
                SessionContext context = new SessionContext(sessionId);
                ThreadLocalContextHolder.setContext(context);
                return LoginCommons.SUCCESSCODE;
            }
            if(service.isAlreadyLogin(userName)){
                return LoginCommons.USEROTHORALREADYLOGIN;
            }
            return LoginCommons.USERCOOKIEERROR;
        }
    }

    2.配置拦截适配器 并定义拦截范围

    package com.shareworx.interceptor;
    
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.Ordered;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
    /**
     * 
     * @author zhenwei.shi
     * 用于配置全局控制拦截操作
     */
    @Configuration
    public class YJWYWebConfiguration extends WebMvcConfigurerAdapter {
        
        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
    //        registry.addViewController("/").setViewName("view/main/index.html");
            registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
            super.addViewControllers(registry);
        }
        
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            /*WebAuthInterceptor interceptor = new WebAuthInterceptor();
            interceptor.addExcludeMapping("/view/login/");
            interceptor.addExcludeMapping("/view/main/");
            interceptor.addExcludeMapping("/pageerror");
            interceptor.addExcludeMapping("/jsonerror");
            interceptor.addExcludeMapping("/error");
            registry.addInterceptor(interceptor);*/
            
            YJWYHttpRequestInterceptor requestInterceptor = new YJWYHttpRequestInterceptor();
            registry.addInterceptor(requestInterceptor).addPathPatterns("/yjwy/**");
            APPHttpRequestInterceptor appRequestInterceptor = new APPHttpRequestInterceptor();
            registry.addInterceptor(appRequestInterceptor).addPathPatterns("/app/**");
        }
    }
  • 相关阅读:
    jdbc操作元数据
    jdbc完成增删改查
    jdbc原理
    JDBC快速入门
    DOM_调查问卷效果2
    DOM_radio
    DOM_mail效果
    css基础
    《POSIX多线程程序设计》读书笔记
    《(转载)Bullet物理引擎不完全指南(Bullet Physics Engine not complete Guide)》
  • 原文地址:https://www.cnblogs.com/zwcry/p/8478968.html
Copyright © 2011-2022 走看看