LoginSignup
1

More than 1 year has passed since last update.

SpringBootでログインユーザーの登録情報を使用

Posted at

やりたいこと

SpringBootにおいて、フロント側でログインしているユーザーの情報を扱いたい。ユーザーidごとに表示を変えたり、ログインしているロールによって表示を変えたりなどが柔軟に表現できる。

手順

いかに大まかな手順をメモ。

DAOでサーバー側からユーザー情報を取得

これはシンプルにapiを叩いてユーザー情報を取得するDAOを実装するだけ。略。

UserDetailsServiceを実装したクラスの作成

UserDetailsServiceはSpringBootが提供するインターフェースである。抽象メソッドであるloadUserByUsernameをオーバーライドする。このメソッドはUserDetails型のオブジェクトを返却するように実装する。

@Service
public class UserDetailsServiceImpl implements UserDetailsService {
    private final Dao dao;
    
    public UserDetailsServiceImpl(Dao Dao) {
        this.dao = dao;
    }

    @Override
    public UserDetails loadUserByUsername(String username) {
        /** daoからuser情報を取ってくる処理
        * 略
        */
        // UserDetails型のオブジェクトをreturn
        return loginUser; 
    }
}

WebSecurityConfigurerAdapterクラスを継承したクラスを実装

WebSecurityConfigurerAdapterクラスもSpringBootが提供するクラスであり、内部で先ほど実装したUserDetailsServiceImplをインジェクトすれば良い。

@EnableWebSecurity
public class LoginUserConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    UserDetailsServiceImpl userDetailsServiceImpl;
}

ここで@EnableWebSecurityアノテーションも忘れないこと。

呼び出し

ここまでできれば後は、コントローラー側からloginユーザーの情報をバインドできる。

@Controller
@RequestMapping("/hoge")
public class HogeController {
    /** 諸々省略
    * コンストラクタ、インジェクション、など
    */
    
    @GetMapping(path = "/fuga")
    public String fuga(@AuthenticationPrincipal LoginUser loginUser) {
        // 処理
    }
}

ここではLoginUserはUserDetailsを継承したクラスとしている。
これでコントローラーのメソッド内でログインユーザーの情報が扱えるようになる。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1