I created a custom security expression in order to check if a specific user is allowed to access a resource. So my class extends SecurityExpressionRoot and implements MethodSecurityExpressionOperations. Everything is working fine but I can"t auto-wire spring component, it's null.
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);
}
}
SecurityService
@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;
}
}