概述
在开始这篇文章前,博主默认你们已经对Spring Boot、Spring Security、Vue以及JWT已经了解。这里对以上概念也不再赘述。下面先讲一下思路。
1、后端需要编写JWT生成处理和JWT解析认证处理。
2、前端填写用户名和密码发送登录请求。
3、经后端Spring Security登录认证成功后,由JWT生成器生成
Token
返回给前端。4、前端拿到
Token
,在之后的请求中需要携带这个Token
。5、后端编写JWT过滤器,对请求中的
Token
进行解析处理,解析成功通过,失败返回相应提示。
效果展示
hello
按钮不需要登录,测试1
和测试2
按钮需要登录才能访问。点击登录后会获取Token
,下次发送请求携带这个Token
.
代码实现
后端实现
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
1、在用户成功登录后下发Token
Spring Security
在做登录操作的时候允许我们添加我们的自己的登录成功处理器
和登录失败处理器
。这里我编写了自己的成功处理器
和失败处理器
。在成功处理器
中添加了生成JWT
的操作。代码如下:
//自定义的登录成功处理器
@Component("myLoginSuccessHandler")
public class MyLoginSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private ObjectMapper objectMapper;
@Override
public void onAuthenticationSuccess(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse,
Authentication authentication) throws IOException, ServletException {
logger.info("登录成功!");
// 登录成功后设置JWT
String Token = Jwts.builder()
//设置token的信息
// .setClaims(claimsMap)
//将认证后的authentication写入token,验证时,直接验证它
.claim("authentication",authentication)
//设置主题
.setSubject("主题")
//过期时间
.setExpiration(new Date(System.currentTimeMillis() + 60 * 60 * 24 * 1000))
//加密方式
.signWith(SignatureAlgorithm.HS512, "MyJWTtest")
.