jinlin
2023-11-27 5d8c028ff37838e0628d5852e41b19efc80e4be1
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
/**
 * Copyright (c) 2018 人人开源 All rights reserved.
 *
 * https://www.renren.io
 *
 * 版权所有,侵权必究!
 */
 
package com.zt.core.context;
 
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
 
/**
 * 用户
 *
 * @author hehz
 */
public class UserContext {
//    public static String FACTORY_ID="factoryId";
//    public static String SHIP_ID="shipId";
//    public static String REGION_FLAG="regionFlag";
 
    public static Subject getSubject() {
        try {
            return SecurityUtils.getSubject();
        }catch (Exception e){
            return null;
        }
    }
 
    /**
     * 获取用户信息
     */
    public static User getUser() {
        Subject subject = getSubject();
        if(subject == null){
            return new User();
        }
 
        User user = (User)subject.getPrincipal();
        if(user == null){
            return new User();
        }
 
        return user;
    }
 
    /**
     * 获取用户ID
     */
    public static Long getUserId() {
        return getUser().getId();
    }
 
    /**
     * 获取部门ID
     */
    public static Long getDeptId() {
        return getUser().getDeptId();
    }
 
    /**
     * 用戶login成功后,執行此方法。
     * regionFlag可以是all,qd,sy三个值之一,分别表示当前用户所属于的区域。
     * 依据User的deptId去查询sysDept,对sysDept的pids进行挨个查询,判断sysDept.name是否等于‘三亚’,如果是设置regionFlag为sy,
     * 如果sysDept.name=='青岛',设置regionFlag='qd',否则都不存在就设置regionFlag='yjs'
     * 如果sysDept.name=='厂家',设置factoryId=user.companyId,否则设置其值为空。
     * 如果sysDept.name=='T',设置shipId=User.companyId,否则设置其值为空。
     * factoryId可以是一个sysDept.id或者空,空表示当前用户不属于厂家,有值表示用户属于此厂家。
     * shipId可以是一个sysDept.id或者是空,空表示当前用户不属于某T,否则表示用户属于某T。
     *
     * String regionFlag="";
     *             session.setAttribute(REGION_FLAG,regionFlag);
     *             String factoryId="";
     *             session.setAttribute(FACTORY_ID,factoryId);
     *             String shipId="";
     *             session.setAttribute(SHIP_ID,shipId);
     *
     * 后面在字典数据过滤的时候,业务数据查询的时候都需要从session中拿这几个值,从而进行相关的逻辑处理。
     */
    public static void setSessionValue(String key,String value){
        try {
            Subject subject = getSubject();
            Session session=subject.getSession();
            session.setAttribute(key,value);
 
        }catch(Exception e){
            e.printStackTrace();
        }
 
    }
 
    /**
     * 获取session的key值
     * @param key
     * @return
     */
    public static String getSessionValue(String key){
        try {
            Subject subject = getSubject();
            Session session=subject.getSession();
 
            return (String)session.getAttribute(key);
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }
    }
}