【发布时间】:2017-09-19 14:56:08
【问题描述】:
我有一个基于一些 github 项目的带有 vaadin 会话的 Spring 安全项目。一切正常,直到我创建一个新的配置静态类,我想在其中指定需要 SSL 的路径。
这是我的项目和应用程序类的原始工作状态: https://github.com/czetus/dluznikApp/blob/master/src/main/java/com/danes/main/Application.java
将 Application.java 的代码添加到第一个静态类中
public static class SecurityConfiguriation extends GlobalMethodSecurityConfiguration
@EnableWebSecurity
public static class WebSecurity extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
http.requiresChannel()
.antMatchers("/v1*").requiresSecure();
}
}
项目正在编译和部署,没有任何错误。当我启动 localhost:8080 时问题就开始了。我收到此处定义的异常:
java.lang.IllegalStateException: No VaadinSession bound to current thread
at com.danes.main.servlet.VaadinSessionSecurityContextHolderStrategy.getSession(VaadinSessionSecurityContextHolderStrategy.java:41) ~[classes/:na]
at com.danes.main.servlet.VaadinSessionSecurityContextHolderStrategy.clearContext(VaadinSessionSecurityContextHolderStrategy.java:12) ~[classes/:na]
at org.springframework.security.core.context.SecurityContextHolder.clearContext(SecurityContextHolder.java:73) ~[spring-security-core-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:180) ~[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
...
如果我删除注释 @EnableWebSecurity 没有错误并且 ssl 不起作用。
当我调试时,我注意到 getSession 在方法中被调用得太早了
@Override
public void setContext(SecurityContext context) {
getSession().setAttribute(SecurityContext.class, context);
}
在 VaadinSessionSecurityContextHolderStrategy.java 类中
那么我该怎么做,或者是否有其他方法可以不创建此配置类并让此路径(模式)受 SSL 保护?
【问题讨论】:
标签: java ssl servlets spring-boot vaadin