springmvc拦截器配置

本文介绍了一种基于Spring MVC的拦截器实现方案,分别针对普通用户和管理员进行权限验证。通过检查会话中是否存在相应的用户信息来决定是否允许访问受保护的资源,并对Ajax请求和普通HTTP请求进行了区分处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.ptpl.core.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.ptpl.constant.Session_Constant;
import com.ptpl.model.UserBaseAccountInfo;
import com.ptpl.web.util.StringUtil;

/**
 * @ClassName: UserInterceptor
 * @Package com.ptpl.core.interceptor
 * @Description: TODO(用户后台拦截器 )
 * @author shengliu
 */
public class UserInterceptor implements HandlerInterceptor {

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object arg2, Exception arg3)
			throws Exception {

	}

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

	}

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
		UserBaseAccountInfo userBaseAccountInfo = (UserBaseAccountInfo) request.getSession()
				.getAttribute(Session_Constant.USER);
		if (userBaseAccountInfo != null) {
			return true;
		} else {
			// http请求头(header)信息中的 x-requested-with有值且值为XMLHttpRequest时为Ajax异步请求
			String requestType = request.getHeader("X-Requested-With");
			// 判断是否为ajax请求
			if (StringUtil.isNotEmpty(requestType) && requestType.equalsIgnoreCase("XMLHttpRequest")) {
				// 该请求是Ajax异步请求
				response.getWriter().print("logout");
			} else {
				// 该请求是传统的http同步请求
				response.sendRedirect(request.getContextPath() + "/user/tologin.action");
			}
			return false;
		}
	}

}
package com.ptpl.core.interceptor;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.ptpl.constant.Session_Constant;
import com.ptpl.model.AdminUser;
import com.ptpl.web.util.StringUtil;


/**
 * @ClassName: AdminUserInterceptor
 * @Package com.ptpl.core.interceptor
 * @Description: TODO(管理员后台拦截器 )
 * @author shengliu
 */
public class AdminUserInterceptor implements HandlerInterceptor {


	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object obj, Exception arg3)
			throws Exception {
	}


	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object obj, ModelAndView arg3)
			throws Exception {
	}


	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception {
		// 查询是否登录
		AdminUser adminUser = (AdminUser) request.getSession().getAttribute(Session_Constant.ADMINUSER);
		if (adminUser != null) {
			return true;
		} else {
			// http请求头(header)信息中的 x-requested-with有值且值为XMLHttpRequest时为Ajax异步请求
			String requestType = request.getHeader("X-Requested-With");
			// 判断是否为ajax请求
			if (StringUtil.isNotEmpty(requestType) && requestType.equalsIgnoreCase("XMLHttpRequest")) {
				// 该请求是Ajax异步请求
				response.getWriter().print("logout");
			} else {
				// 该请求是传统的http同步请求
				response.sendRedirect(StringUtil.getBasePath(request) + "/admin/login.action");
			}
			return false;
		}
	}


}
	<!-- 拦截器配置 -->
	<mvc:interceptors>
		<!-- 系统管理后台拦截器 -->
		<mvc:interceptor>
			<mvc:mapping path="/adminuser/**" />
			<mvc:mapping path="/admin/**" />
			<mvc:exclude-mapping path="/admin/login.action" />
			<bean class="com.ptpl.core.interceptor.AdminUserInterceptor" />
		</mvc:interceptor>


		<!-- 普通用户后台拦截器 -->
		<mvc:interceptor>
			<mvc:mapping path="/user/**" />
			<mvc:exclude-mapping path="/user/tologin.action" />
			<mvc:exclude-mapping path="/user/tologin.action" />
			<mvc:exclude-mapping path="/user/logined.action" />
			<bean class="com.ptpl.core.interceptor.UserInterceptor" />
		</mvc:interceptor>
	</mvc:interceptors>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值