首页 > 解决方案 > @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;
    }

}

标签: javaspringspring-bootspring-securitydependency-injection

解决方案


推荐阅读