拦截器(在没有登录状态的情况下需要先登录才能进行操作)

给购物车系统添加拦截器

拦截器作用

 

自定义拦截器

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";
    }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-12-11 08:56  sakura-yxf  阅读(406)  评论(0)    收藏  举报