Skip to content

Commit a5cf8ea

Browse files
Release v1.0.0
1 parent 68943ae commit a5cf8ea

File tree

12 files changed

+107
-65
lines changed

12 files changed

+107
-65
lines changed

pom.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>net.ymate.module</groupId>
88
<artifactId>ymate-module-sso</artifactId>
9-
<version>1.0-SNAPSHOT</version>
9+
<version>1.0.0</version>
1010
<packaging>jar</packaging>
1111

1212
<name>ymate-module-sso</name>
@@ -183,17 +183,17 @@
183183
<dependency>
184184
<groupId>net.ymate.platform</groupId>
185185
<artifactId>ymate-platform-webmvc</artifactId>
186-
<version>2.0.3</version>
186+
<version>2.0.4</version>
187187
</dependency>
188188
<dependency>
189189
<groupId>net.ymate.framework</groupId>
190190
<artifactId>ymate-framework-commons</artifactId>
191-
<version>2.0.3</version>
191+
<version>2.0.4</version>
192192
</dependency>
193193
<dependency>
194194
<groupId>net.ymate.framework</groupId>
195195
<artifactId>ymate-framework-core</artifactId>
196-
<version>2.0.3</version>
196+
<version>2.0.4</version>
197197
</dependency>
198198
<dependency>
199199
<groupId>org.apache.httpcomponents</groupId>

src/main/java/net/ymate/module/sso/ISSOToken.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public interface ISSOToken extends Serializable {
9292
boolean validationRequired();
9393

9494
/**
95-
* 更新验证时间
95+
* @return 更新验证时间并返回当前令牌对象本身
9696
*/
9797
ISSOToken updateLastValidateTime();
9898

src/main/java/net/ymate/module/sso/ISSOTokenAdapter.java

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,13 @@
1515
*/
1616
package net.ymate.module.sso;
1717

18+
import net.ymate.platform.core.support.IInitializable;
19+
1820
/**
1921
* @author 刘镇 (suninformation@163.com) on 17/1/1 上午2:57
2022
* @version 1.0
2123
*/
22-
public interface ISSOTokenAdapter {
23-
24-
/**
25-
* 初始化令牌适配器
26-
*
27-
* @param owner 所属模块管理器实例
28-
* @throws Exception 可能产生的任何异常
29-
*/
30-
void init(ISSO owner) throws Exception;
31-
32-
void destroy() throws Exception;
24+
public interface ISSOTokenAdapter extends IInitializable<ISSO> {
3325

3426
/**
3527
* @return 生成令牌唯一标识KEY

src/main/java/net/ymate/module/sso/ISSOTokenAttributeAdapter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222
public interface ISSOTokenAttributeAdapter {
2323

2424
/**
25-
* 执行加载用户自定义属性数据token 令牌对象
25+
* 执行加载用户自定义属性数据
26+
*
27+
* @param token 令牌对象
2628
*/
2729
void loadAttributes(ISSOToken token);
2830
}

src/main/java/net/ymate/module/sso/ISSOTokenStorageAdapter.java

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,13 @@
1515
*/
1616
package net.ymate.module.sso;
1717

18+
import net.ymate.platform.core.support.IInitializable;
19+
1820
/**
1921
* @author 刘镇 (suninformation@163.com) on 17/1/1 上午3:06
2022
* @version 1.0
2123
*/
22-
public interface ISSOTokenStorageAdapter {
23-
24-
/**
25-
* 初始化令牌存储适配器
26-
*
27-
* @param owner 所属模块管理器实例
28-
* @throws Exception 可能产生的任何异常
29-
*/
30-
void init(ISSO owner) throws Exception;
31-
32-
void destroy() throws Exception;
24+
public interface ISSOTokenStorageAdapter extends IInitializable<ISSO> {
3325

3426
/**
3527
* 读取令牌数据

src/main/java/net/ymate/module/sso/SSO.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,12 @@ public static ISSO get() {
5555
return __instance;
5656
}
5757

58+
@Override
5859
public String getName() {
5960
return ISSO.MODULE_NAME;
6061
}
6162

63+
@Override
6264
public void init(YMP owner) throws Exception {
6365
if (!__inited) {
6466
//
@@ -68,24 +70,26 @@ public void init(YMP owner) throws Exception {
6870
__moduleCfg = new DefaultModuleCfg(owner);
6971
//
7072
__moduleCfg.getTokenAdapter().init(this);
71-
if (__moduleCfg.getTokenStorageAdapter() != null) {
73+
if (!__moduleCfg.isClientMode() && __moduleCfg.getTokenStorageAdapter() != null) {
7274
__moduleCfg.getTokenStorageAdapter().init(this);
7375
}
7476
//
7577
__inited = true;
7678
}
7779
}
7880

81+
@Override
7982
public boolean isInited() {
8083
return __inited;
8184
}
8285

86+
@Override
8387
public void destroy() throws Exception {
8488
if (__inited) {
8589
__inited = false;
8690
//
8791
__moduleCfg.getTokenAdapter().destroy();
88-
if (__moduleCfg.getTokenStorageAdapter() != null) {
92+
if (!__moduleCfg.isClientMode() && __moduleCfg.getTokenStorageAdapter() != null) {
8993
__moduleCfg.getTokenStorageAdapter().destroy();
9094
}
9195
//
@@ -94,14 +98,17 @@ public void destroy() throws Exception {
9498
}
9599
}
96100

101+
@Override
97102
public YMP getOwner() {
98103
return __owner;
99104
}
100105

106+
@Override
101107
public ISSOModuleCfg getModuleCfg() {
102108
return __moduleCfg;
103109
}
104110

111+
@Override
105112
public ISSOToken currentToken() {
106113
UserSessionBean _sessionBean = UserSessionBean.current();
107114
if (_sessionBean != null) {
@@ -110,6 +117,7 @@ public ISSOToken currentToken() {
110117
return null;
111118
}
112119

120+
@Override
113121
public ISSOToken createToken(String uid) throws Exception {
114122
ISSOToken _token = new DefaultSSOToken(uid).build();
115123
//

src/main/java/net/ymate/module/sso/controller/SSOTokenController.java

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import net.ymate.module.sso.SSO;
2929
import net.ymate.platform.core.beans.annotation.Before;
3030
import net.ymate.platform.core.util.ExpressionUtils;
31+
import net.ymate.platform.validation.validate.VRequired;
3132
import net.ymate.platform.webmvc.annotation.Controller;
3233
import net.ymate.platform.webmvc.annotation.RequestMapping;
3334
import net.ymate.platform.webmvc.annotation.RequestParam;
@@ -97,43 +98,41 @@ public IView __toAuthorize(@RequestParam(Optional.REDIRECT_URL) String redirectU
9798
* @throws Exception 可能产生的任何异常
9899
*/
99100
@RequestMapping(value = "/authorize", method = Type.HttpMethod.POST)
100-
public IView __doAuthorize(@RequestParam("token_id") String tokenId,
101-
@RequestParam String uid,
102-
@RequestParam("remote_addr") String remoteAddr,
103-
@RequestParam String sign) throws Exception {
101+
public IView __doAuthorize(@VRequired @RequestParam("token_id") String tokenId,
102+
@VRequired @RequestParam String uid,
103+
@VRequired @RequestParam("remote_addr") String remoteAddr,
104+
@VRequired @RequestParam String sign) throws Exception {
104105

105106
if (SSO.get().getModuleCfg().isClientMode()) {
106107
return HttpStatusView.METHOD_NOT_ALLOWED;
107108
}
108109
//
109-
if (StringUtils.isNotBlank(tokenId) && StringUtils.isNotBlank(uid) && StringUtils.isNotBlank(remoteAddr) && StringUtils.isNotBlank(sign)) {
110-
Map<String, String> _params = new HashMap<String, String>();
111-
_params.put("token_id", tokenId);
112-
_params.put("uid", uid);
113-
_params.put("remote_addr", remoteAddr);
114-
//
115-
String _sign = ParamUtils.createSignature(_params, false, SSO.get().getModuleCfg().getServiceAuthKey());
116-
if (StringUtils.equals(sign, _sign)) {
117-
ISSOTokenStorageAdapter _storageAdapter = SSO.get().getModuleCfg().getTokenStorageAdapter();
118-
// 尝试从存储中加载原始令牌数据并进行有效性验证
119-
ISSOToken _token = _storageAdapter.load(uid, tokenId);
120-
if (_token != null) {
121-
boolean _ipCheck = (SSO.get().getModuleCfg().isIpCheckEnabled() && !StringUtils.equals(remoteAddr, _token.getRemoteAddr()));
122-
if (_token.timeout() || !_token.verified() || _ipCheck) {
123-
_storageAdapter.remove(_token.getUid(), _token.getId());
124-
return WebResult.CODE(ErrorCode.USER_SESSION_INVALID_OR_TIMEOUT).toJSON();
125-
} else {
126-
WebResult _result = WebResult.SUCCESS();
127-
// 尝试加载令牌自定义属性
128-
ISSOTokenAttributeAdapter _attributeAdapter = SSO.get().getModuleCfg().getTokenAttributeAdapter();
129-
if (_attributeAdapter != null) {
130-
_attributeAdapter.loadAttributes(_token);
131-
if (!_token.getAttributes().isEmpty()) {
132-
_result.data(_token.getAttributes());
133-
}
110+
Map<String, String> _params = new HashMap<String, String>();
111+
_params.put("token_id", tokenId);
112+
_params.put("uid", uid);
113+
_params.put("remote_addr", remoteAddr);
114+
//
115+
String _sign = ParamUtils.createSignature(_params, false, SSO.get().getModuleCfg().getServiceAuthKey());
116+
if (StringUtils.equals(sign, _sign)) {
117+
ISSOTokenStorageAdapter _storageAdapter = SSO.get().getModuleCfg().getTokenStorageAdapter();
118+
// 尝试从存储中加载原始令牌数据并进行有效性验证
119+
ISSOToken _token = _storageAdapter.load(uid, tokenId);
120+
if (_token != null) {
121+
boolean _ipCheck = (SSO.get().getModuleCfg().isIpCheckEnabled() && !StringUtils.equals(remoteAddr, _token.getRemoteAddr()));
122+
if (_token.timeout() || !_token.verified() || _ipCheck) {
123+
_storageAdapter.remove(_token.getUid(), _token.getId());
124+
return WebResult.CODE(ErrorCode.USER_SESSION_INVALID_OR_TIMEOUT).toJSON();
125+
} else {
126+
WebResult _result = WebResult.SUCCESS();
127+
// 尝试加载令牌自定义属性
128+
ISSOTokenAttributeAdapter _attributeAdapter = SSO.get().getModuleCfg().getTokenAttributeAdapter();
129+
if (_attributeAdapter != null) {
130+
_attributeAdapter.loadAttributes(_token);
131+
if (!_token.getAttributes().isEmpty()) {
132+
_result.data(_token.getAttributes());
134133
}
135-
return _result.toJSON();
136134
}
135+
return _result.toJSON();
137136
}
138137
}
139138
}

src/main/java/net/ymate/module/sso/event/SSOSessionEventListener.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,10 @@ public class SSOSessionEventListener implements IEventRegister {
4242

4343
private static final Log _LOG = LogFactory.getLog(SSOSessionEventListener.class);
4444

45+
@Override
4546
public void register(Events events) throws Exception {
4647
events.registerListener(Events.MODE.NORMAL, WebEvent.class, new IEventListener<WebEvent>() {
48+
@Override
4749
public boolean handle(WebEvent context) {
4850
switch (context.getEventName()) {
4951
case SESSION_DESTROYED:
@@ -60,6 +62,8 @@ public boolean handle(WebEvent context) {
6062
}
6163
}
6264
break;
65+
default:
66+
break;
6367
}
6468
return false;
6569
}

src/main/java/net/ymate/module/sso/impl/DefaultModuleCfg.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,58 +107,72 @@ public DefaultModuleCfg(YMP owner) {
107107
}
108108
}
109109

110+
@Override
110111
public String getTokenCookieName() {
111112
return __tokenCookieName;
112113
}
113114

115+
@Override
114116
public String getTokenHeaderName() {
115117
return __tokenHeaderName;
116118
}
117119

120+
@Override
118121
public String getTokenParamName() {
119122
return __tokenParamName;
120123
}
121124

125+
@Override
122126
public int getTokenMaxage() {
123127
return __tokenMaxage;
124128
}
125129

130+
@Override
126131
public int getTokenValidateTimeInterval() {
127132
return __tokenValidateTimeInterval;
128133
}
129134

135+
@Override
130136
public String getCacheNamePrefix() {
131137
return __cacheNamePrefix;
132138
}
133139

140+
@Override
134141
public boolean isMultiSessionEnabled() {
135142
return __multiSessionEnabled;
136143
}
137144

145+
@Override
138146
public boolean isIpCheckEnabled() {
139147
return __ipCheckEnabled;
140148
}
141149

150+
@Override
142151
public boolean isClientMode() {
143152
return __isClientMode;
144153
}
145154

155+
@Override
146156
public String getServiceBaseUrl() {
147157
return __serviceBaseUrl;
148158
}
149159

160+
@Override
150161
public String getServiceAuthKey() {
151162
return __serviceAuthKey;
152163
}
153164

165+
@Override
154166
public ISSOTokenAdapter getTokenAdapter() {
155167
return __tokenApater;
156168
}
157169

170+
@Override
158171
public ISSOTokenStorageAdapter getTokenStorageAdapter() {
159172
return __tokenStorageAdapter;
160173
}
161174

175+
@Override
162176
public ISSOTokenAttributeAdapter getTokenAttributeAdapter() {
163177
return __tokenAttributeAdapter;
164178
}

0 commit comments

Comments
 (0)