mwi*_*rek 3 java spring spring-security spring-session
我使用 Spring 构建了一个 REST API 服务,其中我使用 MongoDB 启用了会话:
@Configuration
@EnableMongoHttpSession(maxInactiveIntervalInSeconds = Globals.SESSION_MAX_INTERVAL)
public class SessionConfig {
@Bean
public AbstractMongoSessionConverter createSessionConverterBean() {
return new JacksonMongoSessionConverter(Collections.singletonList(new GeoModule()));
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我想控制应该向哪些连接发出会话。目前,每个 HTTP 请求都会为其生成一个会话,但在某些情况下不需要该会话,我不希望将会话存储与永远不会使用的会话对象混在一起。
一个这样的场景是充当内容管理系统的独立桌面应用程序。此应用程序不需要 HTTP 会话,因为身份验证是通过应用程序端通过自定义授权标头完成的。此应用程序也仅从某个根路由映射访问端点:
公共交通路线api.domain.com/pub和 CMS 交通路线通过api.domain.com/cpi。
如果能够告诉 Spring 它不需要为任何请求创建会话,那就太好了/cpi。桌面应用程序还提供了一个独特的Origin,如果更容易完成,我也可以匹配。
我的网络安全看起来像这样:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.anyRequest()
.permitAll()
.and()
.cors()
.and()
.httpBasic();
http.csrf().disable(); // Self-implemented
}
Run Code Online (Sandbox Code Playgroud)
我已经找遍了,没有找到任何东西。任何人都可以指出我正确的方向吗?
谢谢!
您可以在以下方案中添加多个安全配置。其中一个明确匹配所有/cpi请求,另一个处理其余请求。
您还可以通过这种方式配置不同的身份验证方法。
@Order(1)
@Configuration
public static class Custom1WebSecurityConfigurerAdapter extends
WebSecurityConfigurerAdapter {
http
.antMatcher("/cpi/**")
.authorizeRequests()
...
http.sessionManagement() // dont create a session for this configuration
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
@Order(2)
@Configuration
public static class Custom2WebSecurityConfigurerAdapter extends
WebSecurityConfigurerAdapter {
http
.authorizeRequests()
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7008 次 |
| 最近记录: |