如何使用spring security和java在jwt json中传递角色或权限
Posted
技术标签:
【中文标题】如何使用spring security和java在jwt json中传递角色或权限【英文标题】:How to pass role or authorities in jwt json, using spring security and java 【发布时间】:2021-06-03 11:31:40 【问题描述】:我想为 Redux 传递 JWT 中的角色或权限,这是因为有更好的方法来根据我的设计授予访问权限(可能不是最好的),因为我是中级,我对如何传递感到困惑它在构建 jwt 时,这是配置(我学习的方式);
public String generateToken(Authentication authentication)
User user = (User) authentication.getPrincipal();
Date now = new Date(System.currentTimeMillis());
Date expiryDate = new Date(now.getTime()+ SecurityConstants.EXPIRATION_TIME);
String userId = Long.toString(user.getId());
Map<String, Object> claims = new HashMap<>();
claims.put("id", (Long.toString(user.getId())));
claims.put("username", user.getUsername());
return Jwts.builder() //WE create the token like this
.setSubject(userId)
.setClaims(claims)
.setIssuedAt(now)
.setExpiration(expiryDate)
.signWith(SignatureAlgorithm.HS512, SecurityConstants.SECRET)
.compact();
//Validate token in API
public boolean validateToken (String token)
try
Jwts.parser().setSigningKey(SecurityConstants.SECRET).parseClaimsJws(token);
return true;
catch (SignatureException ex)
System.out.println("Invalid JWT signature");
catch (MalformedJwtException ex)
System.out.println("Invalid JWT token");
catch (ExpiredJwtException ex)
System.out.println("Expired JWT token");
catch (UnsupportedJwtException ex)
System.out.println("Unsupported JWT token");
catch (IllegalArgumentException ex)
System.out.println("JWT claims string is empty");
return false;
//GET userId from token
public Long getUserIdFromJWT(String token)
Claims claims = Jwts.parser().setSigningKey(SecurityConstants.SECRET).parseClaimsJws(token).getBody();
String id = (String)claims.get("id");
return Long.parseLong(id);
我尝试在 builder 和 generateToken 中以多种方式添加它,但总是出错,我希望在此处添加它;
jwt in Redux image
在用户 jwt 中,我也想传递角色。 --->用户角色:“管理员”
任何建议或支持先谢谢你!
【问题讨论】:
【参考方案1】:您可以使用声明来设置和获取用户角色,或者只是将登录名/用户 ID 查询到数据库中并检查它是否被授权。
Is setting Roles in JWT a best practice?
在您的示例中,您将在声明声明的正下方添加此 sn-p
claims.put("角色", user.getRole());
【讨论】:
确实我发现了一些其他不好的做法,但到目前为止我还在学习,谢谢!!以上是关于如何使用spring security和java在jwt json中传递角色或权限的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Java 和 XML 配置在 Spring Security 中配置 jdbc 身份验证管理器?
如何在 Grails 应用程序和 Java 应用程序之间共享 Spring Security 类?
java.security.Principal - 在 HttpServletRequest 和 Spring Security 中创建
如何使用 Spring Security 检查 Java 代码中的“hasRole”?