zoukankan      html  css  js  c++  java
  • yb课堂之用户登陆校验拦截器开发 《十一》

    开发对应的登陆拦截器

    开发loginInterceptor

    • 登陆校验成功放行
    • 登陆不成功返回json数据

    LoginInterceptor.java

    package net.ybclass.online_ybclass.interceptor;
    
    import com.fasterxml.jackson.databind.ObjectMapper;
    import io.jsonwebtoken.Claims;
    import net.ybclass.online_ybclass.utils.JWTUtils;
    import net.ybclass.online_ybclass.utils.JsonData;
    import org.apache.commons.lang3.StringUtils;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.PrintWriter;
    
    public class LoginInterceptor implements HandlerInterceptor {
        /**
         * 进入到Controller之前的方法
         *
         * @param request
         * @param response
         * @param handler
         * @return
         * @throws Exception
         */
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            try {
                String accesToken = request.getHeader("token");
                if (accesToken == null) {
                    accesToken = request.getParameter("token");
                }
                if (StringUtils.isNoneBlank(accesToken)) {
                    Claims claims = JWTUtils.checkJWT(accesToken);
                    if (claims == null) {
                        sendJsonMessage(response, JsonData.buildError("登陆过期,请重新登陆"));
                        //告诉登陆过期,重新登陆
                        return false;
                    }
                    Integer id = (Integer) claims.get("id");
                    String name = (String) claims.get("name");
                    request.setAttribute("user_id", id);
                    request.setAttribute("name", name);
                    return true;
                }
            } catch (Exception e) {
            }
            //登陆失败
            sendJsonMessage(response, JsonData.buildError("登陆过期,请重新登陆"));
            return false;
        }
    
        /**
         * 响应json数据给前端
         * @param response
         * @param obj
         */
        public static void sendJsonMessage(HttpServletResponse response, Object obj) {
            try {
                ObjectMapper objectMapper=new ObjectMapper();
                response.setContentType("application/json;charset=utf-8");
                PrintWriter writer=response.getWriter();
                writer.print(objectMapper.writeValueAsString(obj));
                writer.close();
                writer.flush();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    
        }
    }
  • 相关阅读:
    CSS 之 @media
    How to fix “Duplicate sources.list entry …” issue
    shell脚本加不加export的区别
    过滤部分错误信息,不输出到stderr
    /dev/null 2>&1 解释(转)
    crontab与环境变量
    PHP实现斐波那契数列非递归方法
    有反斜杠时候,CakePHP往pgsql插入数据异常
    PHP输出图片文件,实现浏览器缓存机制
    sudo: unable to resolve host XXX 解决方法
  • 原文地址:https://www.cnblogs.com/chenyanbin/p/13328532.html
Copyright © 2011-2022 走看看