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";
        }
    }
  • 相关阅读:
    ASP.NET MVC 3 新特性
    C#用WebClient下载File时操作超时的问题
    用C# 实现 Zen Cart 的用户密码加密算法
    ASP.NET MVC 局部缓存实现 用户控件缓存 Partial Output Caching
    关于MarshalByRefObject的解释
    文件的上传和下载
    浅谈三维GIS的应用之三维管线
    Python:处理不是经由EXPORT出來的Windows日志
    python :简单邮件发送
    日志文件分割:将包含不同关键字的行写入到不同的文件
  • 原文地址:https://www.cnblogs.com/Answer1215/p/14283874.html
Copyright © 2011-2022 走看看