zoukankan      html  css  js  c++  java
  • [Java Spring MVC] Introduction to interceptors

    Interceptor jump in before controller. So request may not reach controller if Pre-process is not ok.

    Demo:

    package com.test.hplus.interceptors;
    
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
    
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.util.Date;
    
    public class LoggingInterceptor extends HandlerInterceptorAdapter {
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
           //get all cookies
            //log session id:
            //log the request path
    
            String sessionId = null;
    
            if(null!=request.getCookies()){
                for(Cookie cookie: request.getCookies()){
                    if("JSESSIONID".equals(cookie.getName())){
                        sessionId = cookie.getValue();
                    }
                }
            }
    
            System.out.println("Incoming request data log: session: "+sessionId+
                    " at "+ new Date()+" for "+request.getRequestURI());
    
            return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("in post handle");
        }
    }

    Add inteceptor to conifg:

    @Configuration
    @ComponentScan(basePackages = "com.test.hplus")
    public class ApplicationConfig extends WebMvcConfigurationSupport {
     
    
        ...   
    
        @Override
        protected void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new LoggingInterceptor()).addPathPatterns("/*");
        }
    }

    For each requests, login interceptor will jump in.

    Forwarding request from login controller to profile controller:

        @PostMapping("/login")
        public String login(@ModelAttribute("login")Login login){
            User user  = userRepository.searchByName(login.getUsername());
            if(user==null){
                throw new ApplicationException("User not found");
            }
            return "forward:/userprofile";
        }
    @Controller
    public class UserProfileController {
    
        @PostMapping("/userprofile")
        public String getUserProfile(@SessionAttribute("login")Login login, Model model){
            System.out.println("in user profile controller");
            System.out.println("username from session: "+login.getUsername());
            //call to userrepository to get all the user information
            model.addAttribute("username", login.getUsername());
            return "profile";
        }
    }
  • 相关阅读:
    R语言介绍与安装
    待分析数据数值化
    网络环路与攻击和谷歌的四个8
    基于storm和hadoop的广告系统研究【5】
    Xpath语法
    Xcode编译工具
    关于Xcode的Other Linker Flags
    iOS项目的目录结构和开发流程
    Objective-C中关于NSArray, NSDictionary, NSNumber等写法的进化
    Windows 8 常见教程
  • 原文地址:https://www.cnblogs.com/Answer1215/p/14283874.html
Copyright © 2011-2022 走看看