kev*_*olo 2 redirect spring spring-mvc interceptor spring-boot
我使用spring boot和freemarker创建了一个Web应用程序,并实现了拦截器(HandlerInterceptorAdapter).
在拦截器内部,当用户未登录时,它将重定向到登录页面.这很好用.但问题是控制器在重定向到登录页面之前首先被执行.
我的拦截器代码:
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
User userSession = (User) request.getSession().getAttribute("user");
if (userSession == null) {
response.sendRedirect("/login");
}
}
Run Code Online (Sandbox Code Playgroud)
控制器类(在response.sendRedirect之后,此控制器仍然被执行).为什么?我陷入了这个问题.
@RequestMapping("/home")
public String home(Model model, HttpServletRequest httpServletRequest) {
String returnPage = "home-admin";
User user = (User) httpServletRequest.getSession().getAttribute("user");
if(user != null){
String accessType = accessTypeRepository.getAccessType(user.getAccessId());
if(StrUtil.isEqual(accessType, AccessTypeConst.MANAGER.getType())){
returnPage = "home-manager";
}
}
return returnPage;
}
Run Code Online (Sandbox Code Playgroud)
Bun*_*ner 12
return false如果你完成执行,你应该从你的拦截器.
返回:如果执行链应继续使用下一个拦截器或处理程序本身,则返回true.否则,DispatcherServlet假定这个拦截器已经处理了响应本身.
更改
if (userSession == null) {
response.sendRedirect("/login");
}
Run Code Online (Sandbox Code Playgroud)
至
if (userSession == null) {
response.sendRedirect("/login");
return false;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6805 次 |
| 最近记录: |