拦截器(在没有登录状态的情况下需要先登录才能进行操作)
给购物车系统添加拦截器
拦截器作用

自定义拦截器
com.bjsxt.ego.item.interceptor.LoginInterceptor
package com.bjsxt.ego.item.interceptor;
import com.bjsxt.ego.beans.CookieUtils;
import com.bjsxt.ego.beans.JsonUtils;
import com.bjsxt.ego.rpc.pojo.TbUser;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import redis.clients.jedis.JedisCluster;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* * 拦截器的俩种实现
* * 1.继承HandlerInterceptorAdapter接口
* * 2.实现接口方法preHandle
*/
public class LoginInterceptor extends HandlerInterceptorAdapter {
@Autowired
private JedisCluster cluster;
/**
* 验证用户是否登录
*
* @param request
* @param response
* @param handler
* @return
* @throws Exception
*/
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//获取token
String token = CookieUtils.getCookieValue(request, "sso_token");
//判断token是否为空
if (!StringUtils.isEmpty(token)) {
//查询Redis数据库
String jsonStr = cluster.get(token);
//判断用户是否存
if (!StringUtils.isEmpty(jsonStr)) {
TbUser tbUser = JsonUtils.jsonToPojo(jsonStr, TbUser.class);
request.setAttribute("user", tbUser);
//说明已经登录,放行
return true;
}
}
//说明没有登录,那么我们需要在登录之后,再次跳往你要访问的路径
String url = request.getRequestURL().toString();
//重定向到登录页面
response.sendRedirect("http://localhost:8083/login?redirect=" + url);
return false;
}
}
配置拦截器
<!--实例化拦截器对象-->
<bean id="loginInterceptor" class="com.bjsxt.ego.item.interceptor.LoginInterceptor"/>
<!--注册拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<ref bean="loginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
创建 CarItemController
@RequestMapping("/cart/add/{itemid}")
public String CartAdd(@PathVariable Long itemid,
HttpServletRequest request){
TbUser user=(TbUser) request.getAttribute("user");
carItemService.addItemToCarService(itemid,user.getId());
return "cartSuccess";
}

浙公网安备 33010602011771号