java - @Autowired Spring 组件在 CustomWebSecurityExpressionRoot 内抛出 null
问题描述
我创建了一个自定义安全表达式,以检查是否允许特定用户访问资源。所以我的类扩展了 SecurityExpressionRoot 并实现了 MethodSecurityExpressionOperations。一切正常,但我不能自动连接弹簧组件,它是空的。
public class CustomWebSecurityExpressionRoot extends SecurityExpressionRoot
implements MethodSecurityExpressionOperations {
@Autowired
private SecurityService securityService;
public CustomWebSecurityExpressionRoot(Authentication authentication) {
super(authentication);
}
public boolean canAccess(Integer accessId) {
MLoginDto login = securityService.findLoggedInUser();
return login.getAccess() != null && login.getAccess().contains(accessId);
}
}
安保服务
@Service
@Transactional
public class SecurityServiceImpl implements SecurityService {
@Override
public MLoginDto findLoggedInUser() {
SecurityDetails userDetails = (SecurityDetails) SecurityContextHolder.getContext().getAuthentication()
.getPrincipal();
if (userDetails != null) {
return userDetails.getLogin();
}
return null;
}
}
解决方案
推荐阅读
- javascript - 带有 addEventListener 的 javascript 下拉菜单适用于 firefox 但不适用于 chrome
- react-native - 测试库 React-Native - 我尝试调试时不会发生内存泄漏
- reactjs - 如何使用 react-redux 执行 Udate 操作?
- powershell - PowerShell netsh 内联命令无法正常工作
- python - request.form() 导致 400 Bad Request:浏览器(或代理)发送了此服务器无法理解的请求
- geometry - 如何将几何图形添加到 GEE 中的空几何图层
- mathematical-optimization - 添加另一个客观术语
- typescript - 从打字稿的目录中实例化所有类
- reactjs - Yarn 3.x PNP typescript CRA eslint 不适用于 VSCode
- javascript - 如何检查剧作家的回应