我正在开发一个Java应用程序,其中用户为他/她的帐户注册密码。下面是正在使用的:
- Spring Boot
- Spring MVC
- Spring Web Flow
- Spring Security
- Thymeleaf
- 拦截器(用于检查
preHandle
方法中的会话)
对于Spring Security部分,真的不需要身份验证。我只是用它来处理CSRF,配置如下:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// CSRF feature only
http.authorizeRequests().anyRequest().permitAll();
}
}
字符串
现在,这就是事情变得混乱的地方。当我在Unix环境中将其部署到Tomcat时,;jsessionid
会被附加到URL中,Spring Security并不高兴。我在互联网上搜索并找到了以下解决方案来删除它(以及我的结果)。
**application.properties
**中的server.servlet.session.tracking-modes=cookie
不执行任何操作。web.xml
<session-config>
<tracking-mode>COOKIE</tracking-mode>
</session-config>
型
或
@Configuration
public class WebConfig implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) {
HashSet<SessionTrackingMode> set = new HashSet<>();
set.add(SessionTrackingMode.COOKIE);
servletContext.setSessionTrackingModes(set);
}
}
型
生成IllegalArgumentException: The session tracking mode [COOKIE] requested for context [/<context-name>] is not supported by that context
我正要把剩下的头发拔下来,所以我恢复了任何与cookie
相关的更改,并想到在同一个SecurityConfig
类中使用下面的代码片段,只允许URL中的后缀(我知道,我知道,不安全)。
@Bean
public HttpFirewall allowUrlSemicolonHttpFirewall() {
StrictHttpFirewall firewall = new StrictHttpFirewall();
firewall.setAllowSemicolon(true);
return firewall;
}
@Override
public void configure(WebSecurity web) throws Exception {
super.configure(web);
web.httpFirewall(allowUrlSemicolonHttpFirewall());
}
型
瞧!网络流在无限重定向上运行。
问题:
- 有人见过
IllegalArgumentException: The session tracking mode [COOKIE] requested for context [/<context-name>] is not supported by that context
吗?我到处找过,最接近的是this。 server.servlet.session.tracking-modes=cookie
不工作的原因可能和上面的一样吗?- 无限重定向是否是由
http.authorizeRequests().anyRequest().permitAll()
引起的?我尝试使用anonymous()
,但结果是一样的。 - 有没有可能知道到底是哪一部分导致了无限重定向?
请注意,在我的localhost
中,允许URL中的重定向可以正常工作,所以我有一种预感,导致重定向的原因是SSL相关的。同样,本地;jsessionid
没有被附加到URL中。
我的下一步是尝试在本地配置SSL,试图复制这个问题。与此同时,任何帮助都将受到高度赞赏。如果这里有太多的信息,我很抱歉;如果有必要,我愿意将其作为多个问题重新发布。
1条答案
按热度按时间fafcakar1#
今年,我将其作为进一步的开发,实际上导致了我的一个队友的解决方案,当时他将基础代码扩展到一个需要Spring Security的新应用程序。原来我们案例中的持久性
jsessionid
是由于我们的Tomcatcontext.xml
中下面的cookies
属性。字符串
在Java方面,下面的通用安全配置(用于原始应用程序)甚至可以与上面的Tomcat配置一起工作。
型