gpt4 book ai didi

java - Spring MVC HandlerInterceptor : Redirect Failed

转载 作者:行者123 更新时间:2023-12-01 21:19:05 27 4
gpt4 key购买 nike

我创建了一个简单的 WebMVC 应用程序 - 配置了处理程序拦截器。拦截器的职责很简单 - 它应该检查 HttpRequest 中是否存在有效 session - 如果是,则重定向到注册页面。

我遇到的问题是在重定向时 - 浏览器抛出消息:

The page isn't redirecting properly

Firefox has detected that the server is redirecting the request for this address in a way that will never complete.

拦截器代码如下:

public class LoginInterceptor extends HandlerInterceptorAdapter{



// to be used checking session management for user.
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {


System.out.println(" <interceptor> - this is pre handle");

return true;
}


@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {

System.out.println(" <interceptor> - this is post handle");

HttpSession session = request.getSession();
User user = (User) session.getAttribute("user");


System.out.println(" <interceptor> - session id is --> " + session.getId());
System.out.println(" <interceptor> - session create time is --> " + session.getCreationTime());
System.out.println(" <interceptor> - session last accessed time is --> " + session.getLastAccessedTime());

try {
System.out.println(" <interceptor> - user info is --> " + user.toString());
}catch(Exception e){
e.toString();
}

try{
if(session != null){
response.sendRedirect("register");
return;
}
}catch(Exception e){
e.toString();
}

}


public void afterCompletetion(){
System.out.println(" <interceptor> - this is after completion");

}

}

我尝试将完整的请求上下文路径附加到重定向 - 以及根上下文 - 两者都失败了。我看不出我在这方面失败的地方 - 因此非常感谢任何帮助。

最佳答案

无论您编写的拦截器是什么,都会出现在所有请求中。

因此,当它将重定向到 /register 时,它也会到达拦截器,它会发现 session 不为空,并再次重定向......同样的事情继续。 ..无限重定向到同一请求。

@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
HttpSession session = request.getSession();
try{
if(session != null){ //Infinite
response.sendRedirect("register");
return;
}
}catch(Exception e){
e.toString();
}

}

因此请确保它仅拦截配置代码的一个请求

if((request.getRequestURI().equals(contextPath+"/someURI") && session != null){
response.sendRedirect("register");
}

然后它只会检查特定请求并重定向到注册。它不会陷入无限循环。

关于java - Spring MVC HandlerInterceptor : Redirect Failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39463632/

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