3.3进存销系统4
APPLoginUser
package com.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 登录用户信息 */ @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface APPLoginUser { }
IgnoreAuth
package com.annotation; import java.lang.annotation.*; /** * 忽略Token验证 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface IgnoreAuth { }
LoginUser
package com.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 登录用户信息 */ @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface LoginUser { }
DictionaryServletContextListener
package com.ServletContextListener; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.entity.DictionaryEntity; import com.service.DictionaryService; import com.thread.MyThreadMethod; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import javax.servlet.ServletContextListener; import javax.servlet.ServletContextEvent; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 字典初始化监视器 用的是服务器监听,每次项目启动,都会调用这个类 */ public class DictionaryServletContextListener implements ServletContextListener { private static final Logger logger = LoggerFactory.getLogger(DictionaryServletContextListener.class); private MyThreadMethod myThreadMethod; @Override public void contextDestroyed(ServletContextEvent sce) { logger.info("----------服务器停止----------"); } @Override public void contextInitialized(ServletContextEvent sce) { ApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext()); logger.info("----------字典表初始化开始----------"); DictionaryService dictionaryService = (DictionaryService)appContext.getBean("dictionaryService"); List<DictionaryEntity> dictionaryEntities = dictionaryService.selectList(new EntityWrapper<DictionaryEntity>()); Map<String, Map<Integer,String>> map = new HashMap<>(); for(DictionaryEntity d :dictionaryEntities){ Map<Integer, String> m = map.get(d.getDicCode()); if(m ==null || m.isEmpty()){ m = new HashMap<>(); } m.put(d.getCodeIndex(),d.getIndexName()); map.put(d.getDicCode(),m); } sce.getServletContext().setAttribute("dictionaryMap", map); logger.info("----------字典表初始化完成----------"); logger.info("----------线程执行开始----------"); if (myThreadMethod == null) { myThreadMethod = new MyThreadMethod(); myThreadMethod.start(); // servlet 上下文初始化时启动线程myThreadMethod } logger.info("----------线程执行结束----------"); } }
MyThreadMethod
package com.thread; /** * 线程执行方法(做一些项目启动后 一直要执行的操作,比如根据时间自动更改订单状态,比如订单签收30天自动收货功能,比如根据时间来更改状态) */ public class MyThreadMethod extends Thread { public void run() { while (!this.isInterrupted()) {// 线程未中断执行循环 try { Thread.sleep(5000); //每隔2000ms执行一次 } catch (InterruptedException e) { e.printStackTrace(); } // ------------------ 开始执行 --------------------------- // System.out.println("线程执行中:" + System.currentTimeMillis()); } } }
TypeEnum
package com.model.enums; import java.io.Serializable; import com.baomidou.mybatisplus.enums.IEnum; /** * 必须现在 IEnum 配置 该包扫描自动注入,查看文件 spring-mybatis.xml 参数 typeEnumsPackage */ public enum TypeEnum implements IEnum { DISABLED(0, "禁用"), NORMAL(1, "正常"); private final int value; private final String desc; TypeEnum(final int value, final String desc) { this.value = value; this.desc = desc; } @Override public Serializable getValue() { return this.value; } // Jackson 注解为 JsonValue 返回中文 json 描述 public String getDesc() { return this.desc; } }
AuthorizationInterceptor
package com.interceptor; import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerInterceptor; import com.annotation.IgnoreAuth; import com.entity.EIException; import com.entity.TokenEntity; import com.service.TokenService; import com.utils.R; /** * 权限(Token)验证 */ @Component public class AuthorizationInterceptor implements HandlerInterceptor { public static final String LOGIN_TOKEN_KEY = "Token"; @Autowired private TokenService tokenService; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String servletPath = request.getServletPath(); if("/dictionary/page".equals(request.getServletPath()) || "/file/upload".equals(request.getServletPath()) || "/yonghu/register".equals(request.getServletPath()) ){//请求路径是字典表或者文件上传 直接放行 return true; } //支持跨域请求 response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Allow-Headers", "x-requested-with,request-source,Token, Origin,imgType, Content-Type, cache-control,postman-token,Cookie, Accept,authorization"); response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin")); IgnoreAuth annotation; if (handler instanceof HandlerMethod) { annotation = ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class); } else { return true; } //从header中获取token String token = request.getHeader(LOGIN_TOKEN_KEY); /** * 不需要验证权限的方法直接放过 */ if(annotation!=null) { return true; } TokenEntity tokenEntity = null; if(StringUtils.isNotBlank(token)) { tokenEntity = tokenService.getTokenEntity(token); } if(tokenEntity != null) { request.getSession().setAttribute("userId", tokenEntity.getUserid()); request.getSession().setAttribute("role", tokenEntity.getRole()); request.getSession().setAttribute("tableName", tokenEntity.getTablename()); request.getSession().setAttribute("username", tokenEntity.getUsername()); return true; } PrintWriter writer = null; response.setCharacterEncoding("UTF-8"); response.setContentType("application/json; charset=utf-8"); try { writer = response.getWriter(); writer.print(JSONObject.toJSONString(R.error(401, "请先登录"))); } finally { if(writer != null){ writer.close(); } } // throw new EIException("请先登录", 401); return false; } }

浙公网安备 33010602011771号