java认证(java证书有哪些)

发布日期:2024-05-16 18:27:22     手机:https://m.xinb2b.cn/baike/news202226.html    违规举报
核心提示:java认证(java证书有哪些)录认证原创2021-07-28 06:29·微说互联网 前文《Java面试常见问题:JWT是什么?》介绍了会话管理常用的JWT(JSON Web Token)标准,JWT在实现web项目的登录认证及授权是非

java认证(java证书有哪些)

java认证(java证书有哪些)

录认证

原创2021-07-28 06:29·微说互联网

前文《Java面试常见问题:JWT是什么?》介绍了会话管理常用的JWT(JSON Web Token)标准,JWT在实现web项目的登录认证及授权是非常常用的。

JWT请求流程

我们先回顾下JWT的请求流程:

    浏览器向服务器发送POST请求,带有用户名和密码

    服务器验证通过后用密钥创建一个JWT字符串

    服务器返回JWT传给浏览器(客户端)

    浏览器再次请求,将JWT放在请求头中

    服务器验证JWT签名,提取用户信息

    服务器返回响应

下面我们就来讲一下Springboot实现JWT认证的过程。

引入JWT依赖

jwt.io网站上的Java语言的JWT实现

我们可以基于JWT的原理自行实现,不过更方便的做法是引入JWT实现的依赖。jwt.io 网站上列出了不同编程语言的JWT实现,其中com.auth0 是一种基于java语言的常用JWT实现。

<dependency>      <groupId>com.auth0</groupId>      <artifactId>java-jwt</artifactId>      <version>3.4.0</version></dependency> 自定义注解

我们希望通过对token的验证来控制客户端对服务器方法的访问控制,那么在每次客户端请求到来以后,都要做一个token验证。为了避免将token验证的代码逻辑重复地放在每一个服务端方法中,我们可以通过注解来实现对token的验证。

@Target({ElementType.METHOD, ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)public @interface UserLoginToken {    boolean required() default true;}

上面代码定义了一个注解 @UserLoginToken,可以用来修饰方法,也可以用来修饰类,比如Controller。

@UserLoginToken@GetMapping("/getMessage")public String getMessage(){    return "你已通过验证";}

getMessage()方法上面加上了注解@UserLoginToken,必须需要token才能访问。

登录获取token

显然登录方法Login() 是不需要注解的。登录的逻辑就是首先验证用户名和密码,如果验证通过,那么就调用JWT库的方法来生成token。

@Service("TokenService")public class TokenService {    public String getToken(User user){        String token = "";        token = JWT.create().withAudience(user.getId())            .sign(Algorithm.HMAC256(user.getPassword()));        return token;    }}

以上代码使用HMAC-SHA256算法生成token, 密钥就是用户存在服务端数据库中的密码。

withAudience() 将用户ID存入到token中,这样以后服务端收到带有token的请求,就可以从token中提取出用户ID,知道用户是谁了。

拦截器

有了注解还不够,还要有对注解进行处理的拦截器。要实现拦截器,就要继承HandlerInterceptor 接口。

public class AuthenticationInterceptor implements HandlerInterceptor {    @Autowired    UserService userService;    @Override    public boolean preHandle(HttpServletRequest httpServletRequest,                    HttpServletResponse httpServletResponse, Object object) throws Exception {     ... ...     }

HandlerInterceptor接口主要定义了三个方法


 
 
本文地址:https://www.xinb2b.cn/baike/news202226.html,转载请注明出处。

推荐图文
推荐百科经验
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  违规举报  |  蜀ICP备18010318号-4  |  百度地图  | 
Processed in 0.080 second(s), 90 queries, Memory 0.47 M