springmvc使用拦截器跳转至不同页面

前言

在前后端未分离的传统web项目中,当前端访问后台时,后台controller会跳转至指定页面。
假如现在需要根据页面选择的不同语言,让后台跳转至不同页面。传统做法是写不同的controller,每个controller对应一个语言的页面。
其实,我们可以只写一个controller,然后再通过拦截器对页面进行修改。

代码

1.controller代码

返回ok.jsp页面

@RequestMapping("/ok")
public String queryUser(@RequestParam(required = false) String language, HttpSession session) {
    return "ok";
}

2.拦截器代码

核心逻辑是postHandle方法,对返回的ok.jsp界面进行修改

@Component
public class UserInterceptor extends HandlerInterceptorAdapter {


    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("======UserInterceptor用户权限校验=========");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("========UserInterceptor修改modelAndView======");
        HttpSession session = request.getSession();
        if(modelAndView != null && session != null) {
            String modifyViewName = modelAndView.getViewName() + "_" + session.getAttribute("language");
            modelAndView.setViewName(modifyViewName);
        }
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("========UserInterceptor资源释放======");
    }
}

你可能感兴趣的:(入门案例,解决方案)