Springbootトークン検証の実装方法

Spring Bootでトークン認証を実現するには、以下の手順に従います。

  1. ログイン時にユーザー情報からトークンを生成し、クライアントに返却します。
  2. トークンの検証: クライアントはAPIを呼び出すたびに、リクエストヘッダーにトークンを配置し、サーバー側でトークンの有効性を検証する。
  3. トークン認証のフィルターを定義します。フィルターはリクエストヘッダーのトークンに対して検証を行い、トークンの有効性を判断します。
  4. Token認証のアノテーションを付与:ユーザー認証が必要なコントローラのメソッドにこのアノテーションを付け加えると、トークン認証が通った場合のみメソッドアクセスが可能になります。

簡単な実装例は下記のようになる:

  1. トークンを生成する。
public String generateToken(User user) {
    String token = // 生成Token的逻辑
    return token;
}
  1. トークンの検証:
public boolean validateToken(String token) {
    // 校验Token的合法性,判断Token是否过期、是否被篡改等
    if (token合法) {
        return true;
    } else {
        return false;
    }
}
  1. トークン検証フィルタを定義する:
@Component
public class TokenFilter extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        String token = request.getHeader("token");
        if (token != null && validateToken(token)) {
            filterChain.doFilter(request, response);
        } else {
            response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized");
        }
    }
}
  1. トークンバリデーションの注釈を追加する:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface TokenRequired {
}
@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @PostMapping("/login")
    public String login(@RequestBody User user) {
        // 用户登录逻辑
        String token = userService.generateToken(user);
        return token;
    }

    @GetMapping("/user")
    @TokenRequired
    public String getUser() {
        // 获取用户信息的逻辑
        return "User";
    }
}

上記の例では、TokenFilterはリクエストヘッダのトークンを検証するためのフィルタです。TokenRequiredはトークン検証が必要なメソッドに付与するアノテーションです。リクエストが対応するコントローラメソッドに届く前に、フィルタによるトークン検証が行われます。トークン検証が通った場合のみ、メソッドにアクセスできます。

bannerAds