SpringMVC配置拦截器

  如何让用户在浏览器地址栏键入[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 正常访问

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值