lidongdong
2022-10-21 12c8caec0265ffff1c595bcab71b66201d3fbd21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
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;
 
/**
 * 自定义拦截器,判断此次请求是否有权限
 */
/**
 * 自定义拦截器,判断此次请求是否有权限
 */
@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));
                HuaChengSysUser huaChengSysUser=iHuaChengSysUserService.selectData(manager.getHCUserId(HCtoken)+"","","");
                if(huaChengSysUser!=null && !StringUtils.isEmpty(huaChengSysUser.getUserId()) )
                {
                    SysUser sysUser = IUserService.selectData(null,huaChengSysUser.getPhone());
                    if(sysUser==null)
                    {
                        //本地没有此用户  新用户
                        SysUser newSysUser=new SysUser();
                        //默认  1系统后台用户
                        newSysUser.setUserType("3");
                        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);
                    }
                    //新增浏览记录
                    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;
    }
}