2012-03-15 11 views
0

私はアイテムのテーブルを持っていますが、ユーザはそのテーブルのいくつかを選択できるはずです。そして、これらのアイテムは別のテーブルに置かれます(2番目のテーブルでは、アイテム)。アイテムやユーザーをユーザー名の助けを借りて連想させることもできますが、大したことではないと思います。私は、それをする良い方法は何だろうと思います。私はユーザー名(<sec:authentication property="principal.username"/>)を取得する簡単な方法があることを知っていますが、今日私はIDのためのそのような方法はないことを知った。この問題を解決する良い方法は何ですか? UserDetailsを実装して各IDを取得する必要がありますか?この実装の良い例はありますか?私はデータベースと通信するためにHibernateを使用します。識別の他の方法はありますか(複合キーは取り戻すのが簡単な値かそれとも類似した値で構成されていますか)?前もって感謝します。Spring Securityでユニークなユーザデータを取得する

答えて

2

はい、id属性を持つ独自のUserDetailを実装する必要があります。

次に、UserDetailServiceの実装で認証中にこのオブジェクトを入力します。

たとえば

:その後

@Service("CustomUserDetailService") 
public class CustomUserDetailService implements UserDetailsService{ 

    @Autowired 
    private IUserDao userDao; 

    @Override 
    public UserDetails loadUserByUsername(String name) throws UsernameNotFoundException, DataAccessException { 
     User user = userDao.loadByName(name); 
     CustomUserDetail customUserDetail = new CustomUserDetail(); 
     customUserDetail.setId(user.getId()); 
     customUserDetail.setPassword(user.getPassword()); 
     return customUserDetail ; 
    } 

あなたの校長から何かを取り出すことができます。

<sec:authentication property="principal.id"/> 
+0

は、この例では、本当に良さそうに見えます、ありがとうございます。私はチュートリアルのカップルを見つけましたが、彼らは他のタスクに合っているようで、クラス構造は少し異なります。あなたは完全な例にリンクを提供することができますか? –

+1

私はあなたがグーグル上で見つけることができる別のリンクを与えるつもりはないので、トンの例をオンラインで見つけることができると思います。代わりに、私は春の秒を使用して私のpersonnal gitHubへのリンクを与える、これを確認するhttps://github.com/shagaan/Wicked-Book/tree/master/src/main/java/com/tuto/wickedBook/security –

+0

ありがとう多く、これは完璧な例です! –

関連する問題