Spring Boot/認証/スクラッチ/HelloWorld/020_ログイン画面

Spring Boot/認証/スクラッチ/HelloWorld/020_ログイン画面

Prev

LoginController

ログイン画面を実装するため LoginController を作る。

@Controller
@RequestMapping("/login")
public class LoginController {
    @RequestMapping("")
    public String index() {
        return "login/index";
    }
    @RequestMapping("/doLogin")
    public String doLogin() {
        return "login/index";
    }
}

対応する画面も作る

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
        <title>Login</title>
        <meta name="description" content="">
    </head>
    <body>
        <h1>Login</h1>
        <form action="/login/doLogin" method="POST">
            <button type="submit">login</button>
        </form> 
    </body>
</html>

できた。が、現状 interceptor で全体をガードしているので見ることができない

一部除外の印

この全体ガードから指定したモノだけ除外するという設定をする。

この「指定したモノ」を決めるためのアノテーション NoAuth を作る

import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.ElementType;
 
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface NoAuth {
}

このアノテーションを除外したいメソッドに取り付ける

@Controller
@RequestMapping("/login")
public class LoginController {
    @RequestMapping("")
    @NoAuth
    public String index() {
        return "login/index";
    }
    @RequestMapping("/doLogin")
    @NoAuth
    public String doLogin() {
        return "login/index";
    }
}

単に印を付けただけなので当然除外などされない。

アノテーションの有無

ガードしているのは Interceptor なので、そこでこのアノテーションの有無をチェックする。

public class MyAuthInterceptor implements HandlerInterceptor{
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        HandlerMethod h = (HandlerMethod) handler;
        NoAuth a = AnnotationUtils.findAnnotation(h.getMethod(), NoAuth.class);
        if(a != null) {
            return true;
        }else {
            return false;
 
        }
    }
}

アノテーションが存在すれば true ということで表示。存在しなければ false でガードという動きにすうr。

やってみると login/index が表示できるようになっていることがわかる。

これで一部除外設定ができてログイン画面が表示できるようになった。

Next

java/spring/spring_boot/auth/scratch/helloworld/020_login.txt · 最終更新: 2019-06-28 11:01 by ore