前言
需要把Web应用做成无状态的,即服务器端无状态,就是说服务器端不会存储像会话这种东西,而是每次请求时access_token进行资源访问。这里我们将使用 JWT [1],基于散列的消息认证码,使用一个密钥和一个消息作为输入,生成它们的消息摘要。该密钥只有服务端知道。访问时使用该消息摘要进行传播,服务端然后对该消息摘要进行验证。
认证步骤
- 客户端第一次使用用户名密码访问认证服务器,服务器验证用户名和密码,认证成功,使用用户密钥生成JWT并返回
- 之后每次请求客户端带上JWT
- 服务器对JWT进行验证
自定义 jwt 拦截器
1 | /** |
将自定义shiro拦截器,设置到 ShiroFilterFactoryBean
中,然后将需要进行权限验证的 path
进行设置拦截过滤。
登陆
1 | "/login") ( |
JwtUtils
我前面给 jwt 设置了三个参数
1 | # jwt 配置 |
jwt 工具类的编写
1 | "jwt") (prefix = |
总结
由于 JWT 这种方式,服务端不需要保存任何状态,所以服务端不需要使用 session 保存用户信息,单元测试也比较方便,虽然中间转码解码会消耗一些性能,但是影响不大,还比较方便的应用在 SSO [2]。