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>