a-pompom / spring-boot-twitter_clone_practice

ツイッタークローンの勉強用
4 stars 0 forks source link

ユーザごとの投稿機能の実装 #4

Closed a-pompom closed 5 years ago

a-pompom commented 5 years ago

Security Conxtexへユーザ情報を持たせることができるようになったので、 次のステップとして、投稿をDBへ保存する機能を実装する。

上記ステップで実装を進めていく。

a-pompom commented 5 years ago

Security Context上のユーザ名は一意制約は設けるが、varcharを参照に持たせると将来的に投稿の検索などで動作が重くなることが懸念される。 よって、主キーのユーザIDをSecurity Context上へ持たせる手段がないか調査する。

a-pompom commented 5 years ago

以下のように実装した。

private void setUserID(HomeDto dto) { //セッション上のユーザID情報を取得 Authentication auth = SecurityContextHolder.getContext().getAuthentication(); CustomUser user = (CustomUser)auth.getPrincipal();

    //投稿情報に投稿者情報を紐付け
    dto.getPost().setPostUserId(user.getUserId());
}


---

今回の参考情報:

[CustomUserの生成](https://stackoverflow.com/questions/22678891/how-to-get-user-id-from-customuser-on-spring-security)
a-pompom commented 5 years ago

DBへ投稿情報を登録した際にリダイレクトをしているが、 これは直接initメソッドを呼び出すと、POSTパラメータが残った状態となり、 URLへ載ってしまいセキュリティ上の問題が発生することに起因している。 リダイレクトでは同画面のフォワードのような動作をし、一度POSTパラメータを破棄した後にGETリクエストを同画面へ発行するので、安全に画面遷移ができるようになる。