SpringMVC配置+拦截器interceptor

SpringMVC_Config.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
	<!-- MVC注解驱动,引入3个类request,response,json -->
	<mvc:annotation-driven/>

	<!-- 配置扫描器,使得@Controller注解生效 -->
	<context:component-scan base-package="com.jt.web.controller" />
	

	<!-- 定义视图解析器 -->
	<!-- prefix="/WEB-INF/jsp/", suffix=".jsp", viewname="test" -> "/WEB-INF/jsp/test.jsp" -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!-- 前缀 -->
		<property name="prefix" value="/WEB-INF/views/" />
		<!-- 后缀 -->
		<property name="suffix" value=".jsp" />
	</bean>

	<!-- 处理静态资源被“/”所拦截的问题 -->
	<mvc:default-servlet-handler />
	
	<!--定义拦截器  -->
	<mvc:interceptors>
		<mvc:interceptor>
			<mvc:mapping path="/cart/**"/>
			<bean class="com.jt.web.interceptor.CartInterceptor"></bean>
		</mvc:interceptor>
	</mvc:interceptors>
	
</beans>

拦截器

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import com.alibaba.dubbo.common.utils.StringUtils;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.feifan.common.service.HttpClientService;
import com.feifan.common.util.CookieUtils;
import com.feifan.web.pojo.User;
import com.feifan.web.thread.UserThreadLocal;

public class CartInterceptor implements HandlerInterceptor{
	
	@Autowired
	private HttpClientService httpClientService;
	
	private static final ObjectMapper objectMapper = new ObjectMapper();
	
	//在controller方法执行之前执行
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		/**
		 * 1.通过request对象获取cookie对象中的ticket值 
		 * 2.调用SSO单点登陆的业务接口,从redis中获取对象  如果有则转化对象 否则跳转到登陆页面
		 * 3.通过JSON串转化为user对象中的userId传回到Controller中
		 */
		//1.获取cookie对象
		String ticket = CookieUtils.getCookieValue(request, "JT_TICKET");
		//表示Cookie中没有改ticket
		if(StringUtils.isNotEmpty(ticket)){
			String JSONData = httpClientService.doGet("http://sso.feifan.com/user/query/"+ticket);
			if(StringUtils.isNotEmpty(JSONData)){
				JsonNode jsonNode = objectMapper.readTree(JSONData);
				String userJSON = jsonNode.get("data").asText();
				//有可能redis中没有数据为"null"
				if(StringUtils.isNotEmpty(userJSON) && !"null".equals(userJSON)){
					//获取userJSON串
					User user = objectMapper.readValue(userJSON, User.class);
					//将user对象存入到ThreadLocal中
					UserThreadLocal.setUser(user);
					return true;//表示拦截是否放行,  需要配置为true
				}
			}
		}
		response.sendRedirect("/user/login.html");
		UserThreadLocal.setUser(null);
		return false;
	}
	
	//在controller方法执行之后执行
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		// TODO Auto-generated method stub
		
	}
	
	//在controller方法执行之后,转向页面之前执行
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		// TODO Auto-generated method stub
		
	}

}

猜你喜欢

转载自blog.csdn.net/qq_16183731/article/details/85042208