如何让用户在浏览器地址栏键入[http://XXX.XXX.XX.XX:端口号/应用名/]以后自动跳转到系统的登录界面
必须实现HandlerInterceptor接口
接口中有3个方法 perHandle () postHandle() afterCompletion()
perHandle()是在处理请求之前调用的, 如果返回true ,执行下一个拦截器,直到所有的拦截器都执行完毕 再执行被拦截的Controller 然后进入拦截器链, 从最后一个拦截器往回执行所有的postHandle() 接着再从最后一个拦截器往回执行所有的afterCompletion() ,返回false ,从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链
postHandle() 也就是Controller 方法调用之后执行,但是它会在DispatcherServlet 进行视图返回渲染之前被调用,所以我们可以在这个方法中对Controller 处理之后的ModelAndView 对象进行操作
afterCompletion() 方法,该方法也是需要当前对应的Interceptor 的preHandle 方法的返回值为true 时才会执行。顾名思义,该方法将在整个请求结束之后,也就是在DispatcherServlet 渲染了对应的视图之后执行。这个方法的主要作用是用于进行资源清理工作的
1.首先在SpringMVC中 加入
<!-- 拦截器 -->
<mvc:interceptors>
<!-- 多个拦截器,顺序执行 -->
<mvc:interceptor>
<mvc:mapping path="/**"/>/拦截其他
<mvc:exclude-mapping path="/resources/**"/>//不拦截CSS
<bean class="com.qcbylearn.config.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
2.写实现拦截类:LoginInterceptor
package com.qcbylearn.config;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
/**
* 登录认证的拦截器
*/
public class LoginInterceptor implements HandlerInterceptor{
/**
* Handler执行完成之后调用这个方法
*/
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception exc)
throws Exception {
}
/**
* Handler执行之后,ModelAndView返回之前调用这个方法
*/
public void postHandle(HttpServletRequest request, HttpServletResponse response,
Object handler, ModelAndView modelAndView) throws Exception {
}
/**
* Handler执行之前调用这个方法
*/
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
//获取请求的URL
String url = request.getRequestURI();
//URL:login.jsp是公开的;这个项目是除了login.jsp是可以公开访问的,其它的URL都进行拦截控制
if(url.indexOf("Login.jsp")>=0){
return true;
}
//获取Session
HttpSession session = request.getSession();
String username = (String)session.getAttribute("username");
if(username != null){
return true;
}
//不符合条件的,跳转到登录界面
request.getRequestDispatcher("/views/Help_One/Login.jsp").forward(request, response);
return false;
}
}
如果有 session, or Token 就true 正常访问