拦截器 preHandle() 未重定向到 login.html
Posted
技术标签:
【中文标题】拦截器 preHandle() 未重定向到 login.html【英文标题】:Interceptor preHandle() not redirecting to login.html 【发布时间】:2014-05-24 07:08:56 【问题描述】:我有一个弹簧应用程序。我引入了一个 sessionInterceptor 来防止直接访问 index.jsp。如果用户没有登录,它就不能访问 index.jsp 并且应该被重定向到 login.html。代码正在访问 preHandle() 方法并运行所有代码,但在 return false
之后它没有重定向到 login.html。怎么了?有高手帮忙吗?提前致谢。
我在 SessionInterceptor.java 中的 preHandle() 是:
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
HttpSession session = request.getSession();
// if displaying the home page, make sure the user is reloaded.
if (request.getRequestURI().endsWith("login.html"))
session.removeAttribute("isUserLoggedIn");
if (session.getAttribute("isUserLoggedIn") == null && !request.getRequestURI().endsWith("login"))
response.sendRedirect(request.getContextPath() + "/login.html");
return false;
return true;
我也尝试了以下方法,但都是徒劳的。
RequestDispatcher dispatcher = request.getServletContext().getRequestDispatcher("/login.html");
dispatcher.forward(request, response);
我的 dispatcher-servlet.xml 设置是:
<bean id="sessionInterceptor" class="com.xxx.xxx.xxx.SessionInterceptor" />
<bean id="annotationMapper" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<list>
<ref bean="sessionInterceptor" />
</list>
</property>
</bean>
<!-- Configures Handler Interceptors -->
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="com.xxx.xxx.xxx.SessionInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
web.xml 是:
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>login.html</welcome-file>
</welcome-file-list>
【问题讨论】:
如果不重定向,它在做什么? 它什么也没做。运行完整代码后。它保持在同一页面上。 那是什么页面?如果您打开浏览器的网络控制台,响应包含什么?Request URL:http://localhost:8080/myContext/index.jsp Request Method:GET Status Code:200 OK
响应是我的 index.jsp。
***.com/questions/11132653/…的可能重复
【参考方案1】:
您可以尝试重定向到将从控制器捕获的逻辑路径 试试
response.sendRedirect("/NotLogged");
然后像这样创建一个函数:
@RequestMapping(value = "/NotLogged", method = RequestMethod.GET)
public String notLogged()
return "login.html";
希望对你有用!
【讨论】:
response.sendRedirect(request.getContextPath() + "/errors/401.html");
【参考方案2】:
当我使用 return false 时,我接受“错误:超过 maxRedirects。可能卡在重定向循环 http://localhost:8080/api/login”
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
if(true)
response.sendRedirect("/api/login");
return false;
return true;
【讨论】:
以上是关于拦截器 preHandle() 未重定向到 login.html的主要内容,如果未能解决你的问题,请参考以下文章