Skip to content

Commit 8f6308e

Browse files
committed
feat: 添加从SecurityContext获取认证信息方法
1 parent 89f42d9 commit 8f6308e

2 files changed

Lines changed: 37 additions & 2 deletions

File tree

framework/src/main/java/top/cadecode/uniboot/framework/security/TokenAuthHolder.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@
66
import cn.hutool.jwt.JWT;
77
import lombok.Data;
88
import org.springframework.boot.context.properties.ConfigurationProperties;
9+
import org.springframework.security.core.Authentication;
10+
import org.springframework.security.core.context.SecurityContextHolder;
911
import org.springframework.stereotype.Component;
12+
import top.cadecode.uniboot.system.bean.dto.SysUserDto;
1013

1114
import javax.servlet.http.Cookie;
1215
import javax.servlet.http.HttpServletRequest;
@@ -135,4 +138,33 @@ public String getTokenFromRequest(HttpServletRequest request) {
135138
}
136139
return request.getHeader(getHeader());
137140
}
141+
142+
/**
143+
* SpringSecurity相关,判断是否认证
144+
*
145+
* @param authentication Security认证信息
146+
* @return token
147+
*/
148+
public boolean isAuthenticated(Authentication authentication) {
149+
if (ObjectUtil.isNull(authentication)) {
150+
authentication = SecurityContextHolder.getContext().getAuthentication();
151+
}
152+
return authentication != null && authentication.getPrincipal() instanceof SysUserDto;
153+
}
154+
155+
/**
156+
* SpringSecurity相关,取出UserDetails SysUserDto
157+
*
158+
* @param authentication Security认证信息
159+
* @return SysUserDto
160+
*/
161+
public SysUserDto getUserDetails(Authentication authentication) {
162+
if (ObjectUtil.isNull(authentication)) {
163+
authentication = SecurityContextHolder.getContext().getAuthentication();
164+
}
165+
if (authentication != null && authentication.getPrincipal() instanceof SysUserDto) {
166+
return (SysUserDto) authentication.getPrincipal();
167+
}
168+
return null;
169+
}
138170
}

framework/src/main/java/top/cadecode/uniboot/framework/security/voter/DataBaseRoleVoter.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.springframework.security.web.FilterInvocation;
88
import org.springframework.stereotype.Component;
99
import org.springframework.util.AntPathMatcher;
10+
import top.cadecode.uniboot.framework.security.TokenAuthHolder;
1011
import top.cadecode.uniboot.system.bean.dto.SysUserDto;
1112
import top.cadecode.uniboot.system.bean.vo.SysApiVo;
1213
import top.cadecode.uniboot.system.service.SysApiService;
@@ -30,9 +31,11 @@ public class DataBaseRoleVoter extends RoleVoter {
3031

3132
private final SysApiService sysApiService;
3233

34+
private final TokenAuthHolder tokenAuthHolder;
35+
3336
@Override
3437
public int vote(Authentication authentication, Object object, Collection<ConfigAttribute> attributes) {
35-
if (authentication == null || !(authentication.getPrincipal() instanceof SysUserDto)) {
38+
if (!tokenAuthHolder.isAuthenticated(authentication)) {
3639
return ACCESS_ABSTAIN;
3740
}
3841
// 获取请求 url
@@ -41,7 +44,7 @@ public int vote(Authentication authentication, Object object, Collection<ConfigA
4144
// 获取 api role 的关系列表
4245
List<SysApiVo> sysApiVos = sysApiService.listSysApiVo();
4346
// 获取用户角色
44-
SysUserDto sysUserDto = (SysUserDto) authentication.getPrincipal();
47+
SysUserDto sysUserDto = tokenAuthHolder.getUserDetails(authentication);
4548
List<String> roles = sysUserDto.getRoles();
4649
// 获取与 url 相同的配置,不存在与 url 相同配置则使用 ant 风格匹配
4750
SysApiVo sysApiVo = sysApiVos.stream()

0 commit comments

Comments
 (0)