gpt4 book ai didi

spring - 使用 Spring Boot 拦截器重定向

转载 作者:行者123 更新时间:2023-12-01 07:12:36 29 4
gpt4 key购买 nike

我使用 spring boot 和 freemarker 创建了一个 web 应用程序并实现了拦截器(HandlerInterceptorAdapter)。

在拦截器内部,当用户未登录时,它将重定向到登录页面。这工作正常。但问题是 Controller 在重定向到登录页面之前首先被执行。

我的拦截器代码:

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
User userSession = (User) request.getSession().getAttribute("user");
if (userSession == null) {
response.sendRedirect("/login");
}
}

Controller 类(在 response.sendRedirect 之后,这个 Controller 还在执行中)。为什么?我很纠结这个问题。
@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;
}

最佳答案

您应该return false如果您完成了执行,则从您的拦截器中获取。

Returns: true if the execution chain should proceed with the next interceptor or the handler itself. Else, DispatcherServlet assumes that this interceptor has already dealt with the response itself.



http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/HandlerInterceptor.html

改变
if (userSession == null) {
response.sendRedirect("/login");
}


if (userSession == null) {
response.sendRedirect("/login");
return false;
}

关于spring - 使用 Spring Boot 拦截器重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44740332/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com