SSM —— 拦截器HandlerInterceptor

        在web项目中,我们经常使用到拦截器,用来判断用户是否登录,用户信息有没有问题,或者针对某个功能请求进行拦截预处理。下面就是一个针对用户是否登录进行的拦截例子:

  步骤:

        编写 HandlerInterceptor 的实现类:

import com.ft.emedical.tool.CommonUtil;
import com.ft.emedical.tool.Constant;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * @Author Bill
 * @Version 1.0, 2017-1-11
 * @See
 * @Since com.and.erp.common.interceptor
 * @Description: TODO
 */
public class IndexInterceptor implements HandlerInterceptor {

	/*@Autowired
	private S_PlatformService s_PlatformService;*/
	private static Log log = LogFactory.getLog(IndexInterceptor.class);
	@Override
	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception {
		// TODO Auto-generated method stub

	}

	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception {
		// TODO Auto-generated method stub

	}

	@Override
	public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
		arg1.setHeader("Access-Control-Allow-Headers", "X-Requested-With, accept, content-type, exception");
		arg1.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH");
		arg1.setHeader("Access-Control-Allow-Credentials", "true");
		arg1.setHeader("Access-Control-Allow-Origin", arg0.getHeader("Origin"));//前段项目的域

		HttpSession session = arg0.getSession(true);
		// 从session 里面获取用户名的信息
		Object sysUser = session.getAttribute(Constant.USER_SESSION_KEY);
		Object appUser = session.getAttribute(Constant.APPUSER_KEY);
		// 判断如果没有取到用户信息,就跳转到登陆页面,提示用户进行登陆
		if (CommonUtil.isBlank(sysUser) && CommonUtil.isBlank(appUser)) {
			log.error("身份过期,重新登录");
			arg1.sendRedirect(arg0.getContextPath() + "/toLogin.do");
			return false;
		}
		return true;
	}
}

 

        设置拦截范围,在spring的xml配置文件中添加(不解释了,大概看可以看明白):

	<mvc:interceptors>

		<mvc:interceptor>
            <!--  拦截所有请求 -->
			<mvc:mapping path="/*" />
			<mvc:mapping path="/*/*" />
			<mvc:mapping path="/*/*/*" />
			<mvc:mapping path="/*/*/*/*" />

            <!--  不拦截的请求 -->
			<mvc:exclude-mapping path="/toLogin.do" />
			<mvc:exclude-mapping path="/toIndex.do" />
			<mvc:exclude-mapping path="/login.do" />
			<mvc:exclude-mapping path="/toNoPri.do" />
			<mvc:exclude-mapping path="/toSameData.do" />
			<mvc:exclude-mapping path="/hh.do" />

			<mvc:exclude-mapping path="/system/user/toupdatepwd.do" />
			<mvc:exclude-mapping path="/api/*" />
			<mvc:exclude-mapping path="/api/*/*" />
			<mvc:exclude-mapping path="/api/*/*/*" />

			<!--  拦截器对应的实现类 -->
			<bean class="com.ft.emedical.common.interceptor.IndexInterceptor" />

		</mvc:interceptor>

	</mvc:interceptors>

然后启动完成拦截器配置

 

SSM框架中,可以使用拦截器Interceptor)来对请求进行拦截和处理。如果你想要放行jQuery请求,可以在拦截器的配置中进行相关设置。 首先,在你的拦截器类中,可以通过重写`preHandle`方法来实现对请求的拦截处理。在该方法中,你可以通过获取请求的URL或其他相关信息来判断是否需要对该请求进行拦截。 如果你想要放行jQuery请求,可以在`preHandle`方法中进行判断,如果是jQuery请求,则返回`true`,表示放行;否则,可以进行其他处理或返回`false`,表示拦截该请求。 下面是一个简单的示例: ```java public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 获取请求URL String requestUrl = request.getRequestURI(); // 判断是否是jQuery请求 if (requestUrl.contains("/jquery")) { return true; // 放行jQuery请求 } else { // 进行其他处理或返回false拦截请求 // ... return false; } } // 其他方法省略... } ``` 在上述示例中,假设请求URL中包含`/jquery`字符串的请求被认为是jQuery请求,将会被放行。你可以根据实际情况进行修改和扩展。 最后,在Spring MVC的配置文件(如`dispatcher-servlet.xml`)中配置拦截器,示例如下: ```xml <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <!-- 拦截所有请求 --> <bean class="com.example.MyInterceptor"/> </mvc:interceptor> </mvc:interceptors> ``` 通过以上配置,拦截器将会对所有请求进行拦截并进行处理。 希望对你有所帮助!如果还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值