Как использовать аннотацию @Autowired в обычном классе(т.е в классе без аннотации @Controller или @Service)
У меня есть класс MyUserPrincipal, с помощью которого у меня осуществляется авторизация. Этот класс не помечен аннотацией @Controller или @Service. код класса MyUserPrincipal:
package com.greatproject.dishonline.service;
import com.greatproject.dishonline.entity.Role;
import com.greatproject.dishonline.entity.User;
import java.util.*;
import java.util.stream.Collectors;
import com.greatproject.dishonline.repository.RolesRepository;
import com.greatproject.dishonline.repository.UsersRepository;
import org.jvnet.hk2.annotations.Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
public class MyUserPrincipal implements UserDetails {
@Autowired
RolesRepository rolesRepository;
private User user;
// private List<RoleAuth> roles;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public MyUserPrincipal(User user) {
this.user = user;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
Collection<GrantedAuthority> authorities = new ArrayList<>();
for (String roleName:rolesRepository.findRolesNames()
) {
SimpleGrantedAuthority authority = new SimpleGrantedAuthority(roleName);
authorities.add(authority);
}
return authorities;
}
@Override
public String getPassword() {
return user.getPassword();
}
@Override
public String getUsername() {
return user.getLogin();
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return user.isActive();
}
//...
}
Проблема в том, что объект rolesRepository не заполняется аннотацией @Autowired, т.к класс MyUserPrincipal не помечен аннотацией @Controller или @Service. И в результате olesRepository.findRolesNames() возвращает null. Код репозитория RolesRepository:
package com.greatproject.dishonline.repository;
import com.greatproject.dishonline.entity.RestTable;
import com.greatproject.dishonline.entity.Role;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
public interface RolesRepository extends JpaRepository<Role, Long> {
@Query("SELECT r FROM Role r WHERE r.name='ROLE_USER'")
Role findUserRole();
@Query("SELECT r.name FROM Role r")
List<String> findRolesNames();
}
Помогите, пожалуйста, разобраться как сделать чтобы аннотация заработала в классе MyUserPrincipal.