簡體   English   中英

Spring-Security:正在優化獲取當前經過身份驗證的用戶…

[英]Spring-Security : Optimizing get currently authenticated user…

我正在使用Spring-Security進行身份驗證的Spring-MVC應用程序。 由於過度使用獲取當前已認證的用戶機制,Profiler將其顯示為“分配熱點”,並且單個用戶消耗了近9.5kb的內存。 有什么方法可以優化此基礎架構。

PersonServiceImpl:

 @Override
    public Person getCurrentlyAuthenticatedUser() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        if (authentication == null) {
            return null;
        } else {
            return personDAO.findPersonByUsername(authentication.getName());
        }
    }

如果我總是可以在第一次檢索后從某個地方將用戶推送到某個緩存中,那至少可以提高性能,但是我不知道該怎么做。 歡迎任何建議。 謝謝。

您可以使用一些變體。 但您也可以嘗試僅使用Spring:1.擴展org.springframework.security.core.userdetails.User並添加到您的UserEntity(人)中

public class User extends org.springframework.security.core.userdetails.User {
    private Person sysUser; 

  public User(Person sysUser) {
        super(sysUser.getLogin(), sysUser.getPassword(), new ArrayList<>());
        this.sysUser = sysUser;
    }

public Person getYourUser(){
return sysUser;
}

}
  1. 使用您的用戶實體和擴展的org.springframework.security.core.userdetails.User實現UserDetailsS​​ervice

     @Service(value = "userService") public class UserService implements UserDetailsService { @Autowired SecurityDAO securityDAO; @Override public UserDetails loadUserByUsername(String login) throws UsernameNotFoundException { User user = null; try { Person su = securityDAO.getUserOnlyByLogin(login); if (su != null) user = new User(Person); } catch (Exception e) { e.printStackTrace(); } return user; } 

    }

  2. 配置您的Spring(xml或Annotation):

  <beans:bean id="userService" class="your.pack.UserService"/> <authentication-manager alias="authenticationManager"> <authentication-provider user-service-ref="userService"/> </authentication-manager> 
  1. 用你的方法

    @Override

      public Person getCurrentlyAuthenticatedUser() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (authentication == null) { return null; } else { User user = (User) authentication.getPrincipal(); return user.getYourUser(); } } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM