Bes*_*ces 9 spring spring-mvc spring-security
我需要能够将HTTP会话存储在关系数据库中,以便跨多个前端服务器对我的前端用户进行无状态负载平衡.我怎样才能在Spring 4中实现这一目标?
我看到如何用Redis做到这一点,但是似乎没有关于如何使用关系数据库(例如Postgres)执行此操作的文档.
Mat*_*ati 20
使用Spring Session(它透明地将覆盖来自Java EE的HttpSessions),你可以SessionRepository使用你的自定义ex 获取接口并实现它.JdbcSessionRepository.这很容易做到.当你有实现时,只需手动添加(你不需要@EnableRedisHttpSession注释)创建过滤器来过滤链,如下:
@Configuration
@EnableWebMvcSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
//other stuff...
@Autowired
private SessionRepository<ExpiringSession> sessionRepository;
private HttpSessionStrategy httpSessionStrategy = new CookieHttpSessionStrategy(); // or HeaderHttpSessionStrategy
@Bean
public SessionRepository<ExpiringSession> sessionRepository() {
return new JdbcSessionRepository();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
SessionRepositoryFilter<ExpiringSession> sessionRepositoryFilter = new SessionRepositoryFilter<>(sessionRepository);
sessionRepositoryFilter.setHttpSessionStrategy(httpSessionStrategy);
http
.addFilterBefore(sessionRepositoryFilter, ChannelProcessingFilter.class);
}
}
Run Code Online (Sandbox Code Playgroud)
在这里你有SessionRepository接口的样子.它只有4种方法可以实现.有关如何创建Session对象,您可以查看MapSessionRepository和MapSession实现(或RedisOperationsSessionRepository和RedisSession).
public interface SessionRepository<S extends Session> {
S createSession();
void save(S session);
S getSession(String id);
void delete(String id);
}
Run Code Online (Sandbox Code Playgroud)
示例解决方案https://github.com/Mati20041/spring-session-jpa-repository
| 归档时间: |
|
| 查看次数: |
4580 次 |
| 最近记录: |