第3回

認証・認可

ToDo管理アプリに認証・認可を実装する

やりたいこと

  1. ToDo管理にメンバーごとのパスワード認証をかけたい
  2. これまで管理者が行っていたメンバー登録は,メンバー自身でやるように変更したい
    • サインアップ: メンバーが自分自身でサービスに登録すること
    • サインイン: メンバーが登録した自身の認証情報でサービスにログインすること
  3. 認可の権限は2種類
    • メンバー (MEMBER): ToDo画面 (/{mid}/todos) で自分のToDoを管理する.
      • 自身のTodDoを閲覧,登録,完了できる.全員のToDo (/{mid}/todos/all) を見ることもできる
      • ただし,他人のToDo画面は見ることができない
    • 管理者 (ADMIN): 管理者画面(/admin/register)でユーザの管理を行う
    • 登録済ユーザの一覧,新規登録,削除ができる

実装

方針

S1: Member, MemberFormにパスワードトロールを追加

解説

S2: UserDetailsの実装クラスUserDetailsImplを作る

package jp.ac.kobe_u.cs.itspecialist.todoapp.dto;

import java.util.ArrayList;
import java.util.Collection;

import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import jp.ac.kobe_u.cs.itspecialist.todoapp.entity.Member;

/**
 * 認証に必要なUserDetailsの実装クラス.Memberをラップする
 */
public class UserDetailsImpl implements UserDetails {
    Member member;
    Collection<GrantedAuthority> authorities = new ArrayList<>();

    /**
     * コンストラクタ
     * @param member
     */
    public UserDetailsImpl(Member member) {
        this.member=member;
        //メンバーのロールから権限を生成して追加
        this.authorities.add(new SimpleGrantedAuthority("ROLE_" + member.getRole()));
    }

    public Member getMember() {
        return member;
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return authorities;
    }

    @Override
    public String getPassword() {
        return member.getPassword();
    }

    @Override
    public String getUsername() {
        return member.getMid();
    }

    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
       return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @Override
    public boolean isEnabled() {
        return true;
    }
}

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS