Java
spring
spring-boot

SpringSecurityの認証済みユーザの情報にuserId,password以外をもたせる方法と参照方法

概要

自分用メモ、SpringSecurity関連のチュートリアルでは、認証に使うuserId,passwordはセッションから参照できるとあるが、他の任意のパラメータはどうなのとおもっただけです。
何の事はない、UserDetailsをimplementsしたクラスにgetterをつければいいだけでした。。

簡単なクラス例

public class User {
    private String userId;
    private String password;
    private String hoge;
    //getter,setter省略
}

public class UserDetailsImpl impl UserDetails {
    private final static User user;

    public UserDetailsImpl(User user) {
        this.user = user;
    }

    public String getHoge() {
        return user.getHoge();
    }
    //Overrideすべきメソッド省略
}

認証方法は以前書いた記事を見てください
SpringSecurityでDBログイン認証処理を実装してみた(MyBatis使用)
SpringSecurityでDBログイン認証処理を実装してみた(MyBatis使用)その2

上記のようなユーザの認証後、セッションに保存されたユーザ情報にコントローラでアクセスする方法。AuthenticationPrincipalアノテーションを利用

@Controller
public class Controller {

    @RequestMapping("/")
    public index(@AuthenticationPrincipal UserDetailsImpl userDetails) {
        System.out.println(userDetails.getUserId) // userId
        System.out.println(userDetails.getPassword) //password
        System.out.println(userDetails.getHoge) //hoge
    }

おまけ、Thymeleafから参照する方法

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
      xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4"> <!-- これを追加してThymeleafからSpringSecurityを利用 -->

<!-- 省略 -->
<body>
  <h>こんにちは、<span sec:authentication="principal.userId"></span>さん</h> <!-- principal.メンバ変数名 で参照できる -->
</body>