前言
在前后端未分离的传统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资源释放======");
}
}