SSM中使用Token和spring过滤器进行判断用户是否登陆
首先我们需要修改登录方法对应存储用户登录信息的代码
将用户登录时生成的token存入Redis
并向前台界面返回token值
//使用uuid生成token
String token = UUID.randomUUID().toString();
//将用户信息存入redis
jedisPool.getResource().setex(token,60 * 60 * 24 * 15 ,JSON.toJSONString(member));
//将token返回给前端
return Result.success("登录成功",token);
处理登录返回结果
在axios中添加localStorage.setItem("token",response.data.data)
axios.post("/login/check.do",this.loginInfo).then((response) => {
if(response.data.flag){
//将服务端返回token保存在浏览器
localStorage.setItem("token",response.data.data)
//登录成功,跳转到index.html
window.location.href="index.html";
}else{
//失败,提示失败信息
this.$message.error(response.data.message);
}
然后需要写一个js文件在需要进行获取token的页面导入
存入网页的请求头内
// 添加请求拦截器
axios.interceptors.request.use(function (config) {
// 在发送请求之前将登录保存的token添加在请求头里面
config.headers.token = localStorage.getItem("token")
return config;
}, function (error) {
// 对请求错误做些什么
return Promise.reject(error);
});
添加spring拦截器
获取token
public class TokenInterceptors implements HandlerInterceptor{
@Autowired
private JedisPool jedisPool;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//获取页面携带的Token
String token = request.getHeader("token");
//通过token查看是否存在此用户
String s = null;
try {
s = jedisPool.getResource().get(token);
if (s.equals("")||s==null){
return false;
}
} catch (Exception e) {
return false;
}
return true;
}
}
springmvc中的配置
<!-- 注册自定义的拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 拦截所有请求 -->
<mvc:mapping path="/order/**"/> //需要进行拦截的requestMapping 的请求行为
<!-- 自定义拦截器的全路径 -->
<bean class="com.zyfmobile.interceptors.TokenInterceptors"/>
</mvc:interceptor>
</mvc:interceptors>