はじめに
今回は、今まで使用していた自前の認可処理を削除します。
そして、前回のカスタム認可に対して、参加者以外がルームURLにアクセスしようとした時の処理を実装します。
内容
参考:
アーキテクチャー :: Spring Security - リファレンス
Spring Security 使い方メモ CSRF - Qiita
状況:認可に弾かれる場合:例えば、参加者でないユーザーがルームのリンクを直接貼って拒否されると、Forbidden ステータスコード403を返す。
アーキテクチャー:: Spring Security - リファレンスの「セキュリティ例外の処理」参照
それが
AccessDeniedException
の場合、アクセスが拒否されます。AccessDeniedHandler
は、拒否されたアクセスを処理するために呼び出されます。
AccessDeniedHandler (spring-security-docs API) - Javadoc
DeniedAccessRoomHandler.java
public class DeniedAccessRoomHandler implements AccessDeniedHandler{
@Override
public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException {
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
response.setContentType("text/html; charset=UTF-8");
try (PrintWriter writer = response.getWriter()) {
writer.println("不正なリクエストです。");
}
}
}
config.java
http.authorizeHttpRequests(authorize ->
authorize.requestMatchers...
...
.exceptionHandling().accessDeniedHandler(new DeniedAccessRoomHandler());
上記構成に、accessDeniedPage(String url)を加えるとステータスコードが200を返してしまい、AccessDeniedHandlerを呼び出さない。
ExceptionHandlingConfigurer (spring-security-docs API) - Javadoc
...
.exceptionHandling(exceptionhandling -> exceptionhandling.accessDeniedHandler(new DeniedAccessRoomHandler()).accessDeniedPage("/joinRoom"))
に変更で、ステータス403を返し、指定したURLを表示する事ができた。
感想
以上、例外処理の動作確認でした。
ステータスコードや例外処理については、Csrfトークンの処理等で適宜触れてきた。
しかし、「適切な実装ができているか」と振り返ると適切とは言い難いと思う。
また、いくら調べども答えがでない事はもちろんだが、時間が足りない。
そこで、基礎の見直しを行いたいと思う。基礎見直し後に、改めて今回の実装を再開する。
一旦、実装にかける時間を下記に割く。
①Spring 解体新書
Java Goldについては、春の転職で客先面談の機会もでてくると思うが、アピールできる資格という意味でもあった方が良いと思う。
関係のない話
気付いたら、はてなブログにLinux学習の記録の下書きがありました。
ノートパソコンにUbuntuをインストールして、コマンドを試しただけの記録なので、特に投稿する必要も感じられず没になったのでした。
昨日は、プログラミング以外に必要な資格取得のため、朝からお昼過ぎまで出かけておりました。移動時間は、個人Webサービスのお話をQiitaや個人ブログ、ラッコM&A等を通して読みました。プログラミングの話はもちろんですが、SEO対策やマネタイズの話もあり、興味深いです。
また、「はっと目覚める確率」を始めました。
昔、青チャートで解いたような気のする問題が多いですが、この本を始めてから別解を考えるのが楽しくなりました。
数列あたりの知識も抜けているので、流れとしては、数年かけて、確率・場合により数列→微分積分・線形代数→統計か確率論を考えています。
業務の学習やアプリ開発に時間を割きたいので、一日一時間を上限とします。
マスタリングTCP/IPでは、業務でお馴染みだった光回線のお話があって面白いです。こちらも1時間を目安に読み進めていきます。目標は、概要の理解に留めます。