ContextUtil.java
4.72 KB
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
package com.hotent.uc.util;
import java.util.Locale;
import org.springframework.context.annotation.Primary;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import com.hotent.base.util.AppUtil;
import com.hotent.base.util.BeanUtils;
import com.hotent.base.util.JsonUtil;
import com.hotent.base.util.StringUtil;
import com.hotent.uc.api.context.ICurrentContext;
import com.hotent.uc.api.model.IGroup;
import com.hotent.uc.api.model.IUser;
import com.hotent.uc.api.service.IUserService;
import com.hotent.uc.model.User;
/**
* 获取上下文数据对象的工具类。
* <pre>
*
* 构建组:eip平台-org-core
* 作者:ray
* 邮箱:zhangyg@jee-soft.cn
* 日期:2013-12-20-上午9:38:46
* 版权:广州宏天软件有限公司版权所有
* </pre>
*/
@Service
@Primary
public class ContextUtil {
private static ContextUtil contextUtil;
private ICurrentContext currentContext;
public void setCurrentContext(ICurrentContext _currentContext){
contextUtil=this;
contextUtil.currentContext=_currentContext;
}
/**
* 获取当前执行人
* @return
* User
* @exception
* @since 1.0.0
*/
public static User getCurrentUser(){
try {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
Assert.notNull(authentication, "当前登录用户不能为空");
Object principal = authentication.getPrincipal();
if(principal instanceof User) {
return (User)principal;
}
else if(principal instanceof UserDetails) {
UserDetails ud = (UserDetails)principal;
User user = JsonUtil.toBean(JsonUtil.toJson(ud), User.class);
return user;
}
return null;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}
}
public static String getCurrentUserId(){
User user = getCurrentUser();
return BeanUtils.isEmpty(user)?null:user.getUserId();
}
/**获取当前组织*/
public static IGroup getCurrentGroup(){
return null;
//return contextUtil.currentContext.getCurrentGroup();
}
/**获取当前组织Id。组织为空则返回空*/
public static String getCurrentGroupId(){
IGroup iGroup = getCurrentGroup();
if(BeanUtils.isNotEmpty(iGroup)){
return iGroup.getGroupId();
}else{
return "";
}
}
/**
* 获取当前Locale。
* @return
* Locale
* @exception
* @since 1.0.0
*/
public static Locale getLocale(){
return contextUtil.currentContext.getLocale();
}
/**
* 清除当前执行人。
* void
* @exception
* @since 1.0.0
*/
public static void clearCurrentUser(){
if(contextUtil!=null){
contextUtil.currentContext.clearCurrentUser();
}
}
/**
* 设置当前执行人。
* @param user
* void
* @exception
* @since 1.0.0
*/
public static void setCurrentUser(IUser user){
Assert.isTrue(BeanUtils.isNotEmpty(user), "传入的用户不能为空");
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
Assert.isNull(authentication, "当前登录上下文中有登录用户时不能设置用户");
UsernamePasswordAuthenticationToken usernamePwdAuth = new UsernamePasswordAuthenticationToken(user, null);
SecurityContextHolder.getContext().setAuthentication(usernamePwdAuth);
}
/**
* 根据用户账户获取用户
*
* @param account
* @return
* @throws Exception
*/
public static IUser getUserByAccount(String account)
{
Assert.isTrue(StringUtil.isNotEmpty(account), "必须传入用户账号");
IUserService userServiceImpl=AppUtil.getBean(IUserService.class);
IUser user = userServiceImpl.getUserByAccount(account);
Assert.isTrue(BeanUtils.isNotEmpty(user), String.format("账号为:%s的用户不存在", account));
return user;
}
public static void setCurrentUserByAccount(String account){
setCurrentUser(getUserByAccount(account));
}
/**
* 设置当前组织(岗位)。
* @param user
* void
* @exception
* @since 1.0.0
*/
public static void setCurrentOrg(IGroup group){
contextUtil.currentContext.setCurrentGroup(group);
}
/**
* 设置Locale。
* @param locale
* void
* @exception
* @since 1.0.0
*/
public static void setLocale(Locale locale){
contextUtil.currentContext.setLocale(locale);
}
/**
* 清除Local。
* void
* @exception
* @since 1.0.0
*/
public static void cleanLocale(){
if(contextUtil!=null){
contextUtil.currentContext.clearLocale();
}
}
public static void clearAll() {
cleanLocale();
clearCurrentUser();
}
}