0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Java, Spring Bootで勉強時間管理アプリを作ってみた。 クラス解説(1)

Posted at
Page 1 of 2

Java, Spring Bootで勉強時間管理アプリを作ってみた。
製作期間:2022年10月2日から
開発環境:Java, Spring Boot, Mybatis, HTML, CSS

・実装した画面
ユーザーがした課題を見るホーム画面
マイページ(自分の過去にした課題の一覧と課題の登録画面)
ログイン画面
会員登録画面
便利機能(就活の企業分析をする画面)
ログアウト

・LoginUserクラス

LoginUser.class
   //packageは省略 
   //importは省略

@Data
public class LoginUser implements UserDetails{
    private int id;
    private String mailaddress;
    private String username;
    private String password;
    private String roleName;

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return AuthorityUtils.createAuthorityList(this.getRoleName());
    }

    @Override
    public String getUsername() {
        return username;
    }

    @Override
    public String getPassword() {
        return password;
    }


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

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

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

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

このクラスはログインに使いたい情報、認可、その他アカウントをロックする条件などを決めるクラスである。
Lombokの@Dataを使うことによってゲッターやセッターを省略。
今回ではid, mailaddress, username(ログインに使用), password(ログインに使用), roleName(認可)。

・Controllerクラス

Controller.class
   //packageは省略 
   //importは省略

@Controller
public class Controller {
    @RequestMapping("/mypage/{username}")
    public Object userPage(ModelAndView mav,
                           @PathVariable("username") String username,
                           @AuthenticationPrincipal LoginUser loginUser) {

        if(loginUser == null) {
            mav = new ModelAndView("userpage");
            mav.addObject("TimeList", timekeepMapper.principalSelectAll(username));
            return mav;
        } else {
            LoginUser record = loginUserMapper.findByUsername(username);
            String principalUsername = loginUser.getUsername();

            if (record == null) {
                return "NullAccount";
            } else if (username.equals(principalUsername)) {
                mav = new ModelAndView("PrincipalUserPage");
                mav.addObject("LoginList", principalUsername);
                mav.addObject("PrincipalTimeList", timekeepMapper.principalSelectAll(username));
                return mav;
            } else {
                mav = new ModelAndView("userpage");

                mav.addObject("TimeList", timekeepMapper.principalSelectAll(username));
                return mav;
            }
        }

    }

解説:Controllerクラスでは、URLとそこでの処理を書いていく。
今回では
@RequestMapping("/")
これがURLの設定となる
これにより、URLに"/"を入力するとここで設定したHTMLのページに飛ばすということができる。

ModelAndView
これはHTMLに表示させる文字などを変数で登録したいときに使用する。
まず初めに "ModelAndView 付けたい名前(今回はmav)"を宣言
そして mav = new ModelAndView("表示させたいHTMLファイル");
 これにより紐づけるHTMLファイルを設定することができる。

そしてmav.addObject("HTMLで設定する変数名", 変数名);
   これによって変数とHTMLで紐づけることができる。

RequestMapping("/{変数のURL}")
@PathVariable("変数のURL") String 変数名
PathVariableはURLに変数を設定することができる。
何も設定しなければ、URLにどんな文字、数字を入れても設定したHTMLページに行くようになる。

今回では
"RequestMapping("/mypage/{username}")
@PathVariable("username") String username(変数名)"とし、
詳しくは後述するが、
if文によってusernameと現在ログインしているusernameが一致すれば、タスク等が編集が可能なユーザーページに飛ばし、
そうでなければ、usernameとデータベース上にあるusernameが一致するか確認し、一致すればタスク等の編集はできないがそのユーザーのページに飛ばし、
その両方に当てはまらないusernameが入力されると、アカウントが見つからないというページに飛ばすようにしている。

@AuthenticationPrincipal LoginUser loginuser
⇒このAuthenticationPrincipalアノテーションは、ログイン中のアカウントの情報を得ることができる。
初めのif文では、loginUserがnullかどうかによってログイン中かそうでないかを判別して、ログイン中でなければ匿名用のHTMLへ、そうでなければ次の分岐(ログインユーザー用のHTML)へ飛ばすようにしている。

さらに今回では、loginUser.getUsername()というゲッターによってログイン中のユーザーネームを確認している。
これによってログイン中のユーザーネームと入力されたユーザーネームが一致するか確認できる。つまり、本人しか入ることができないページを作ることができる。
その方法として、マイページに入る際URLに入力されたユーザーネームとログイン中のユーザーネームが一致する時、編集可能な特別なマイページに飛ばし、URLに入力されたユーザーネームとログイン中のユーザーネームが一致しない場合、編集不可能な閲覧のみのマイページに飛ばすということをしている。

最初のelse以下のif(record == null)は、入力されたユーザーネームが存在するかどうか確認し、それがnullであれば「アカウントが存在しない」という旨のページに飛ばすための文である。

0
1
0

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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?