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";
        }
    }
  • 相关阅读:
    Nginx proxy_pass后的url加不加/的区别
    Magento通过产品ID和SKU获取产品信息
    magento删除产品时删除产品图片
    Magento开发常用函数
    Memcached常用函数说明
    Magento使用Memcached分布式缓存系统
    PHP+Memcache统计当前在线人数
    关于表单编号的考虑
    DataGridView中DataGridViewComboBoxColumn的一些相关应用(一)让其值改变时触发事件-转
    关于何时使用构造函数,何时使用初始化函数
  • 原文地址:https://www.cnblogs.com/Answer1215/p/14283874.html
Copyright © 2011-2022 走看看