2017-12-21 4 views
-1

セッションからいくつかのユーザーの詳細にアクセスしたいと思います。私は、loadUserByUsername(文字列のユーザー名)メソッドをオーバーライドして、春のセキュリティとカスタム認証を使用しています。Springセキュリティを使用してSpringのControllerからUserDetailsオブジェクトにアクセスする

私はユーザーを返信しており、コントローラからアクセスしたいと考えています。私はプリンシパルオブジェクトを試しましたが、ESecurityUserオブジェクトのcompanyIdフィールドに到達できません。

任意の助けをいただければ幸いです。..

@Override 
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { 

    ESecurityUser user = new ESecurityUser(); 
    user.setUsername("hello"); 
    user.setPassword("world"); 
    user.setCompanyId(199); 

    Set<EAuthority> authorities = new HashSet<EAuthority>(); 
    EAuthority authority = new EAuthority(); 
    authority.setAuthority("ROLE_ADMIN"); 
    authorities.add(authority); 

    user.setAuthorities(authorities);; 

    return user; 
} 

サンプルコントローラコード

@RequestMapping("") 
    public String toPeriodicAdReport(@ModelAttribute("advertFormHelper") AdvertFormHelper advertFormHelper, 
      Model model,Principal principal) { 

     //What to write here so that i can access to authenticated user`s companyId field.. 

     return "Test"; 
    } 
+1

ESecurityUserユーザー=(ESecurityUser)元本を、 – brub

+1

@brubこんにちは、私はそれを試みましたが、例外がありました.. 'org.springframework.security.authentication.UsernamePasswordAuthenticationTokenはtr.com.simroll.ada.rvm.report.entity.ESecurityUser'にキャストできません – rematnarab

+0

これは類似しています: https://stackoverflow.com/questions/12078404/org-springframework-security-core-userdetails-user-cannot-be-cast-to-myuser – brub

答えて

1

あなたは直接ESecurityUserにアクセスするためのアノテーション@AuthenticationPrincipalを使用することができます。

@RequestMapping("") 
public String toPeriodicAdReport(@ModelAttribute("advertFormHelper") AdvertFormHelper advertFormHelper, 
     Model model, @AuthenticationPrincipal ESecurityUser principal) { 
    principal.getCompanyId(); 
    return "Test"; 
} 
0
ESecurityUser e = (ESecurityUser)SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 

これは私のために働いてます。..

1

あなたは、コントローラのメソッドに渡されたSpringMVC機械が識別AuthenticationトークンであることをPrincipal遠く...

ませんでしたユーザー。あなたはあなたのコードになる可能性があなたのloadUserByUsername

から返さESecurityUser抽出するために、そのgetDetails()メソッドを使用する必要があります。

@RequestMapping("") 
    public String toPeriodicAdReport(@ModelAttribute("advertFormHelper") AdvertFormHelper advertFormHelper, 
      Model model,Principal principal) { 

     ESecurityUser user = (ESecurityUser) ((Authentication) principal).getDetails(); 

     // stuff... 
     return "Test"; 
} 
関連する問題