毕业设计1-跨域问题,登录逻辑(token)

我的毕业设计采用vue+springboot前后端分离架构,和以前写的JavaWeb项目有很多不同的地方,也遇到了很多的问题。

问题一:跨域问题

因为前端的端口号和后端的端口号不一样,就产生了跨域的问题。

前端我用axios发送请求

import axios from 'axios'
// 配置请求的根路径
axios.defaults.baseURL = 'http://localhost:8090'
Vue.prototype.$http = axios

后端有很多解决跨域的方法,我使用的是@CrossOrigin注解

@CrossOrigin(origins = "http://localhost:8090", maxAge = 3600)
@MapperScan("com.wdq.onebook.dao")
@SpringBootApplication
public class oneBookApplication {

	public static void main(String[] args) {
		SpringApplication.run(oneBookApplication.class, args);
	}

}

问题二:获取用户名

由于是前后端分离的项目,如何知道前端发送请求的用户是谁呢?

如果每次请求都向后端发送用户的信息,后端还要去数据库查询该用户的账号密码,核对是否正确,过于麻烦。

所以我选择用token来解决这个问题。

流程:

  1. 用户登录,前端发送请求到后端

  2. 后端验证成功后,根据用户名和密码生成token令牌发送给前端

  3. 前端把token保存在localStorage中,以后该用户每次发送请求都在header里面放上token

  4. 后端从请求中拿到token,就解析出了用户的用户名和密码

后端的token加密解密:

public class TokenManager {
    //token有效时长
    private long tokenEcpiration = 24*60*60*1000;
    //编码秘钥
    private String tokenSignKey = "wdq_onebook_";
    //1 使用jwt根据用户名生成token
    public String createToken(String username) {
        String token = Jwts.builder().setSubject(username)
                .setExpiration(new Date(System.currentTimeMillis()+tokenEcpiration))
                .signWith(SignatureAlgorithm.HS512, tokenSignKey).compressWith(CompressionCodecs.GZIP).compact();
        return token;
    }
    //2 根据token字符串得到用户信息
    public String getUserInfoFromToken(String token) {
        String userinfo = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token).getBody().getSubject();
        return userinfo;
    }
}

前端保存token到localStorage

//保存
localStorage.setItem('token', JSON.stringify(res.token))

//将token获取到,并全局设置到header里面
import axios from 'axios'
// 配置请求的根路径
axios.defaults.baseURL = 'http://localhost:8090'
Vue.prototype.$http = axios
// 配置header保存token
axios.defaults.headers.common['token'] = JSON.parse(localStorage.getItem('token'))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wonder-King

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值