本站网址
www.kjyfx.com

『Java』Spring Boot项目JSP伪静态技术及拦截器的引入

一、拦截器,实现HandlerInterceptor接口,拦截未登录用户

package com.kjyfx.interceptor;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;
import com.kjyfx.pojo.User;
import com.kjyfx.util.ObjectMapperUtil;
import com.kjyfx.util.UserThreadLocalUtil;
import redis.clients.jedis.JedisCluster;

@Component //交给spring容器管理
public class UserInterceptor implements HandlerInterceptor{
    private static final String TICKET = "JT_TICKET";
    
    @Autowired
    private JedisCluster jedisCluster;
    
    /**
     * 实现用户权限认证 
     * 1.用户不登陆,不允许访问涉密操作.重定向到 
     * 用户登录页面.
     * 2.如果用户登录,则请求予以放行.
     * 方法说明: * 1.boolean  
     *                true: 放行 
     *                false: 拦截 配合重定向使用
     * 实现步骤: 
     *    1.获取用户的Cookie信息. 获取密钥 
     *    2.从redis中获取数据.   
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Cookie[] cookies = request.getCookies();
        String ticket = null;
        //判断cookie是有效的.
        if(cookies.length > 0 ) {
            for (Cookie cookie : cookies) {
                if(TICKET.equals(cookie.getName())) {
                    ticket = cookie.getValue();
                    break;
                }
            }
         }

         if(!StringUtils.isEmpty(ticket)) {
             //校验redis中是否有数据
             String userJSON = jedisCluster.get(ticket);
             if(!StringUtils.isEmpty(userJSON)) {
                 //实现用户信息的动态获取
                 User user = ObjectMapperUtil.toObject(userJSON,User.class);
                 request.setAttribute("JT_USER", user);
                 UserThreadLocalUtil.set(user);
                 return true;
             }
         }

         //如果用户没有登录需要重定向到登录页面
         response.sendRedirect("/user/login.html");
         return false; 
    }
    
    
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        //防止内存溢出
        UserThreadLocalUtil.remove();
    }
}





二、创建配置类,实现WebMvcConfigurer接口

package com.kjyfx.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.kjyfx.interceptor.UserInterceptor;

@Configuration
public class MvcConfigurer implements WebMvcConfigurer{
    //开启匹配后缀型配置 伪静态的支持
    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        configurer.setUseSuffixPatternMatch(true);
    }

    //拦截器
    @Autowired
    private UserInterceptor userInterceptor;
    /** 
     * 拦截器路径: 
     * /cart/*  拦截url请求中/cart/xxxx 下的一级路径 
     * /cart/** 拦截cart下的所有路径 */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(userInterceptor).addPathPatterns("/cart/**","/order/**");
    }
}

 

 

 

 

赞(2) 打赏
未经允许不得转载:所有资源由个人搜集整理自互联网,仅用于学习交流使用,请勿用于其他商业用途。如有侵权,请联系2448941602@qq.com删除科技云分享 » 『Java』Spring Boot项目JSP伪静态技术及拦截器的引入
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

更多资源,尽在微信公众号【科技云分享】

关注公众号加入Q群

我叫科技云,感谢您的支持~

支付宝扫一扫打赏

微信扫一扫打赏