2015-12-03 2 views
0

Мне нужно создать класс POJO, который будет хранить информацию, относящуюся к пользователю. В весенней безопасности моя таблица полномочий имеет дополнительный столбец instituionIds, это строка CSV, которая потребуется в различных вызовах DAO. Мне нужно установить значения этого класса, которые понадобятся при запросе базы данных.Создайте сессионный компонент в весенней безопасности

@Component 
@Scope("session") 
public class InstitutionList { 

    private String institutionList = ""; 

    public String getInstitutionList() { 
     return institutionList; 
    } 

    public void setInstitutionList(String institutionList) { 
     this.institutionList = institutionList; 
    } 
} 

Мне нужно использовать это в моей пользовательской реализации UserDetailsService

@Transactional 
@Service 
public class UserDetailsServiceImpl implements UserDetailsService { 
    private static final Logger logger = LoggerFactory.getLogger(UserDetailsServiceImpl.class); 
    private @Autowired ACSAdminUsersService acsAdminUsersService; 
    private @Autowired ACSAdminAuthoritiesService acsAdminAuthoritiesService; 
    private String[] authority; 

    public ACSAdminUsers getUserByAdminUsername(String username) { 
     logger.info("Getting user by username"); 
     ACSAdminUsers user = acsAdminUsersService.getUserByAdminUsername(username); 
     if(user!=null) acsAdminUsersService.addLogInInfo(username); 
     return user; 
    } 

    @Override 
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { 
     ACSAdminUsers user = getUserByAdminUsername(username); 
     logger.info("Username is : " + username); 
     logger.info("user is : " + user); 

     authority = acsAdminAuthoritiesService.getAuthoritiesForRole(user.getRole()); 
     logger.info("User role is : " + authority); 
     if(authority == null) { 
      throw new UsernameNotFoundException("User : "+username+" has no authorities."); 
     }else { 
     boolean accountNonExpired = true; 
     boolean credentialsNonExpired = true; 
     boolean accountNonLocked = true; 

     return new org.springframework.security.core.userdetails.User(username,user.getAdmin_pass(), 
       true,accountNonExpired,credentialsNonExpired, 
       accountNonLocked, 
       getAuthorities(username)); 
     } 
    } 

    public Collection<? extends GrantedAuthority> getAuthorities(String username) { 
     List<GrantedAuthority> authList = null; 

     authList=new ArrayList<GrantedAuthority>(); 

     for(int i = 0; i < authority.length; i++) { 
      SimpleGrantedAuthority s = new SimpleGrantedAuthority(this.authority[i]); 
      authList.add(s); 
     } 
     return authList; 
    } 
} 

В приведенном выше класс Java, мне нужно обращаться к базе данных и извлечения, а также с органами власти, institutionIds, которые должны быть использованы в запросах во всем приложении.

ответ

0

Вы можете создать свой собственный InstitutionContextHolder и использовать threadlocal для хранения объекта. Таким образом, вы можете получить доступ к этому объекту в каждом классе, который вы хотите. Вы можете взглянуть на SecurityContextHolder для примеров.

Смежные вопросы