解决使用redis作为session缓存报错Error:nosuchkey的问题

spring的issue

https://github.com/spring-projects/spring-session/issues/954
原答案是 Updated my codes to 2.0.0.RELEASE 但好像没什么用。

spring整合了SpringSecurity,本来如果直接浏览器访问接口没问题,但是,前端使用vue访问就会出现

1
Error: no such key

本来没什么事,后来发现vue的同一个页面下,单独一个请求没问题,但如果多次请求就出现接口报错的情况,找到了上诉答案。

因为是spring整合了spring Security,在原答案中看到,每次检查原session的时候如果不存在的话,就会创建新的session,就想直接把security的session禁用掉试试怎么样,没想到成功了

贴下security的配置,将security的session管理禁用掉,并且从原有的session中获取就行了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46


package com.zjzc.crm.security.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.http.SessionCreationPolicy;

/**
* spring-security配置
*
*/
@Configuration
@Order(99)
public class WebSecurityConfig extends AbstractWebSecurityConfig {

@Override
protected void configure(HttpSecurity security) throws Exception {

/**
* always – 如果session不存在总是需要创建;
* ifRequired – 仅当需要时,创建session(默认配置);
* never – 框架从不创建session,但如果已经存在,会使用该session ;
* stateless – Spring Security不会创建session,或使用session;
* ---------------------
* 作者:neweastsun
* 来源:CSDN
* 原文:https://blog.csdn.net/neweastsun/article/details/79371175
* 版权声明:本文为博主原创文章,转载请附上博文链接!
*/
security.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER);

/*
* "migrateSession",即认证时,创建一个新http session,原session失效,属性从原session中拷贝过来
* “none”,原session保持有效;
* “newSession”,新创建session,且不从原session中拷贝任何属性。
*/
security.sessionManagement().sessionFixation().none();

security
.authorizeRequests()
.antMatchers( "/login/**","/validate/**","/sys/user/resetPWD","/claim/fileUpload").permitAll();//权限不校验的接口
super.configure(security);
}
}

以上是这个问题的解决办法,参考自https://blog.csdn.net/neweastsun/article/details/79371175
我遇到的是项目中设置的是SessionCreationPolicy.stateless,改成NEVER就好了。这个问题一直存在,系统时不时会报这个错误,打印出来的异常信息又多。我观察,在页面中频繁调用接口就会出现这个问题。

Kommentare

:D 一言句子获取中...

Loading...Wait a Minute!