package com.dg.core.interceptor; import com.dg.core.Constant; import com.dg.core.annotation.Authorization; import com.dg.core.db.gen.entity.HuaChengSysUser; import com.dg.core.db.gen.entity.SysUser; import com.dg.core.manager.TokenManager; import com.dg.core.service.IHuaChengSysUserService; import com.dg.core.service.ISysUserRecordService; import org.apache.catalina.connector.ResponseFacade; 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.handler.HandlerInterceptorAdapter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.lang.reflect.Method; import java.nio.charset.StandardCharsets; import java.time.LocalDateTime; import java.util.List; /** * 自定义拦截器,判断此次请求是否有权限 */ /** * 自定义拦截器,判断此次请求是否有权限 */ @Component public class AuthorizationInterceptor extends HandlerInterceptorAdapter { @Autowired private TokenManager manager; @Autowired com.dg.core.service.ISysUserService IUserService; /** * 花城e+用户接口 */ @Autowired IHuaChengSysUserService iHuaChengSysUserService; @Autowired private ISysUserRecordService iSysUserRecordService; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //如果不是映射到方法直接通过 if (!(handler instanceof HandlerMethod)) { return true; } HandlerMethod handlerMethod = (HandlerMethod) handler; Method method = handlerMethod.getMethod(); Object bean = handlerMethod.getBean(); //从header中得到token String token = request.getHeader(Constant.AUTHORIZATION); //花城token String HCtoken = request.getHeader(Constant.HCAUTHORIZATION); if(StringUtils.isEmpty(token)) { if (manager.checkHCToken(HCtoken)) { //如果token验证成功,权限检查通过,将token对应的用户id存在request中,便于之后注入 request.setAttribute(Constant.CURRENT_USER_ID, manager.getHCUserId(HCtoken)); System.out.println("花城用户id:"+manager.getHCUserId(HCtoken)); List list=iHuaChengSysUserService.selectData(manager.getHCUserId(HCtoken)+"","",""); HuaChengSysUser huaChengSysUser=null; if(list!=null || list.size()>0 ) { huaChengSysUser=list.get(0); } if(huaChengSysUser!=null && !StringUtils.isEmpty(huaChengSysUser.getUserId()) ) { SysUser sysUser = IUserService.selectData(null,huaChengSysUser.getPhone(),null); if(sysUser==null) { //本地没有此用户 新用户 SysUser newSysUser=new SysUser(); //默认 1系统后台用户 newSysUser.setUserType("4"); newSysUser.setRoleIds("4"); newSysUser.setIsDivisionHead("2"); newSysUser.setPhonenumber(huaChengSysUser.getPhone()); newSysUser.setUserId(huaChengSysUser.getUserId()); newSysUser.setUserName(huaChengSysUser.getNickName()); newSysUser.setSex(huaChengSysUser.getSex()); newSysUser.setAvatar(huaChengSysUser.getImageUrl()); newSysUser.setCreateTime(LocalDateTime.now()); newSysUser.setUpdateTime(LocalDateTime.now()); newSysUser.setOpenid(huaChengSysUser.getOpenid()); IUserService.insertConfig(newSysUser); } else { if(StringUtils.isEmpty(sysUser.getOpenid())) { sysUser.setOpenid(huaChengSysUser.getOpenid()); IUserService.updateConfig(sysUser); } } //新增浏览记录 iSysUserRecordService.add(sysUser); //删除因为token问题产出的重复脏数据 iSysUserRecordService.deleteDistinct(); } return true; } } else { if (manager.checkToken(token)) { //如果token验证成功,权限检查通过,将token对应的用户id存在request中,便于之后注入 request.setAttribute(Constant.CURRENT_USER_ID, manager.getUserId(token)); // SysUser ss = IUserService.selectData(manager.getUserId(token)+""); return true; } } // if(!StringUtils.isEmpty(token)) // { //如果验证token失败,并且方法或类注明了Authorization,返回401错误 if (method.getAnnotation(Authorization.class) != null || bean.getClass().getAnnotation(Authorization.class) != null) { String reponse = "{\"result\": 449, \"message\": \"Overdue token\"}"; response.setStatus(200); response.setCharacterEncoding(StandardCharsets.UTF_8.toString()); ResponseFacade facade = (ResponseFacade) response; facade.setContentLength(reponse.getBytes(StandardCharsets.UTF_8).length); facade.getWriter().write(reponse); return false; } // } return true; } }