Skip to content

Commit 37af79e

Browse files
committed
Do not keep password in jwt payload,
password just for first verify
1 parent 22beb61 commit 37af79e

File tree

6 files changed

+35
-44
lines changed

6 files changed

+35
-44
lines changed

moss-extension/src/main/java/org/xujin/moss/controller/BaseController.java

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package org.xujin.moss.controller;
22

3+
import org.springframework.beans.factory.annotation.Autowired;
4+
import org.springframework.web.context.annotation.RequestScope;
5+
import org.springframework.web.context.request.RequestContextHolder;
6+
import org.springframework.web.servlet.support.RequestContextUtils;
37
import org.xujin.moss.security.jwt.JwtUtil;
48
import org.apache.commons.logging.Log;
59
import org.apache.commons.logging.LogFactory;
@@ -12,33 +16,18 @@
1216
* BaseController用于统一获取信息
1317
*/
1418
public class BaseController {
19+
@Autowired
20+
HttpServletRequest httpServletRequest;
1521

16-
private static final Log logger = LogFactory.getLog(BaseController.class);
17-
18-
protected static final ThreadLocal<HttpServletRequest> requests = new ThreadLocal();
19-
protected static final ThreadLocal<HttpServletResponse> responses = new ThreadLocal();
20-
21-
public BaseController() {
22-
}
23-
24-
@ModelAttribute
25-
public void init(HttpServletRequest request, HttpServletResponse response) {
26-
requests.set(request);
27-
responses.set(response);
28-
}
29-
30-
public HttpServletRequest getRequest() {
31-
return (HttpServletRequest)requests.get();
32-
}
3322

3423
public String getUserNameByToken() {
35-
HttpServletRequest req=(HttpServletRequest)requests.get();
24+
HttpServletRequest req=(HttpServletRequest)httpServletRequest;
3625
String token = req.getHeader("Token");
37-
return JwtUtil.getUsername(token);
26+
return JwtUtil.getUsername(token);
3827
}
3928

4029
public String getRegisterSource() {
41-
HttpServletRequest req=(HttpServletRequest)requests.get();
30+
HttpServletRequest req=(HttpServletRequest)httpServletRequest;
4231
String registerSource = req.getHeader("registerSource");
4332
return registerSource;
4433
}

moss-extension/src/main/java/org/xujin/moss/controller/LoginController.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package org.xujin.moss.controller;
22

3+
import org.springframework.beans.factory.annotation.Autowired;
34
import org.xujin.moss.common.ResultData;
5+
import org.xujin.moss.model.UserModel;
46
import org.xujin.moss.security.jwt.JwtToken;
57
import org.xujin.moss.security.jwt.JwtUtil;
68
import org.apache.shiro.SecurityUtils;
79
import org.apache.shiro.authc.AuthenticationException;
810
import org.apache.shiro.subject.Subject;
911
import org.springframework.web.bind.annotation.*;
12+
import org.xujin.moss.service.UserService;
1013

1114
import java.util.Date;
1215
import java.util.HashMap;
@@ -15,11 +18,16 @@
1518
@RestController
1619
@RequestMapping("/admin")
1720
public class LoginController {
18-
21+
@Autowired
22+
UserService userService;
1923
@PostMapping("/login")
2024
public ResultData login(String username, String password) {
2125
try {
22-
String token= JwtUtil.createToken(username,password);
26+
UserModel user = userService.getUserByUserNameAndPassWord(username, password);
27+
if(user == null) {
28+
throw new AuthenticationException();
29+
}
30+
String token= JwtUtil.createToken(username);
2331
Date tokenExpired = new Date(new Date().getTime() + JwtUtil.EXPIRE_TIME);
2432
JwtToken jwtToken = new JwtToken(token);
2533
Subject subject = SecurityUtils.getSubject();

moss-extension/src/main/java/org/xujin/moss/security/jwt/JwtToken.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.xujin.moss.security.jwt;
22

3+
import com.auth0.jwt.JWT;
4+
import com.auth0.jwt.interfaces.DecodedJWT;
35
import org.apache.shiro.authc.AuthenticationToken;
46

57
/**
@@ -8,9 +10,10 @@
810
*/
911
public class JwtToken implements AuthenticationToken {
1012
private String token;
11-
13+
private DecodedJWT jwt;
1214
public JwtToken(String token) {
1315
this.token = token;
16+
this.jwt = JWT.decode(token);
1417
}
1518

1619
@Override
@@ -22,4 +25,8 @@ public Object getPrincipal() {
2225
public Object getCredentials() {
2326
return token;
2427
}
28+
29+
public String getClaim(String claim) {
30+
return this.jwt.getClaim(claim).asString();
31+
}
2532
}

moss-extension/src/main/java/org/xujin/moss/security/jwt/JwtUtil.java

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,13 @@ public class JwtUtil {
2525
* @param username 用户名
2626
* @return 加密的token
2727
*/
28-
public static String createToken(String username,String password) {
28+
public static String createToken(String username) {
2929
try {
3030
Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME);
3131
Algorithm algorithm = Algorithm.HMAC256(SECRET);
3232
// 附带username信息
3333
return JWT.create()
3434
.withClaim("username", username)
35-
.withClaim("password",password)
3635
//到期时间
3736
.withExpiresAt(date)
3837
//创建一个新的JWT,并使用给定的算法进行标记
@@ -49,13 +48,12 @@ public static String createToken(String username,String password) {
4948
* @param username 用户名
5049
* @return 是否正确
5150
*/
52-
public static boolean verify(String token, String username,String password) {
51+
public static boolean verify(String token, String username) {
5352
try {
5453
Algorithm algorithm = Algorithm.HMAC256(SECRET);
5554
//在token中附带了username信息
5655
JWTVerifier verifier = JWT.require(algorithm)
5756
.withClaim("username", username)
58-
.withClaim("password",password)
5957
.build();
6058
//验证 token
6159
verifier.verify(token);
@@ -79,15 +77,4 @@ public static String getUsername(String token) {
7977
}
8078
}
8179

82-
83-
public static String getPassWord(String token) {
84-
try {
85-
DecodedJWT jwt = JWT.decode(token);
86-
return jwt.getClaim("password").asString();
87-
} catch (JWTDecodeException e) {
88-
return null;
89-
}
90-
}
91-
92-
9380
}

moss-extension/src/main/java/org/xujin/moss/security/shiro/DBRealm.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,11 @@ protected AuthenticationInfo queryForAuthenticationInfo(AuthenticationToken auth
4949
String token = (String) authenticationToken.getCredentials();
5050
// 解密获得username,用于和数据库进行对比
5151
String username = JwtUtil.getUsername(token);
52-
String password = JwtUtil.getPassWord(token);
53-
if (null==username || !JwtUtil.verify(token, username,password)) {
52+
53+
if (null==username || !JwtUtil.verify(token, username)) {
5454
throw new AuthenticationException("token认证失败!");
5555
}
56-
UserModel userModel= userService.getUserByUserNameAndPassWord(username,password);
56+
UserModel userModel= userService.getUserByUserName(username);
5757
if(null==userModel){
5858
return null;
5959
}

moss-extension/src/main/java/org/xujin/moss/security/shiro/LdapRealm.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,13 @@ protected AuthenticationInfo queryForAuthenticationInfo(AuthenticationToken auth
5757
String token = (String) authenticationToken.getCredentials();
5858
// 解密获得username,用于和数据库进行对比
5959
String username = JwtUtil.getUsername(token);
60-
String password = JwtUtil.getPassWord(token);
61-
if (null==username || !JwtUtil.verify(token, username,password)) {
60+
61+
if (null==username || !JwtUtil.verify(token, username)) {
6262
throw new AuthenticationException("token认证失败!");
6363
}
6464
LdapContext ctx = null;
6565
try {
66-
ctx = ldapContextFactory.getLdapContext(username, password);
66+
ctx = ldapContextFactory.getLdapContext(username, null);
6767
} catch (Throwable e) {
6868
LOGGER.error(e.getMessage(), e);
6969
return null;

0 commit comments

Comments
 (0)