Java Spring Security使用自定义登录表单忘记身份验证

Java Spring Security使用自定义登录表单忘记身份验证,java,spring,jsf-2,spring-security,Java,Spring,Jsf 2,Spring Security,我大致按照以下描述创建了一个自定义登录表单: 登录表单使用LoginBean,LoginBean使用AuthenticationService: @ServiceauthenticationService 公共类身份验证服务{ @Resourcename=authenticationManager AuthenticationManager AuthenticationManager; 公共布尔登录字符串用户名、字符串密码{ 试一试{ AuthenticationAuthenticate=au

我大致按照以下描述创建了一个自定义登录表单:

登录表单使用LoginBean,LoginBean使用AuthenticationService:

@ServiceauthenticationService 公共类身份验证服务{ @Resourcename=authenticationManager AuthenticationManager AuthenticationManager; 公共布尔登录字符串用户名、字符串密码{ 试一试{ AuthenticationAuthenticate=authenticationManager.authenticatenew用户名密码AuthenticationTokenUserName,密码; 如果authenticate.isAuthenticated{ SecurityContextHolder.getContext.setAuthenticationauthenticate; 返回true; } }捕获身份验证异常{ } 返回false; } } 通常情况下,一切正常,登录方法对我的用户返回true。但是登录表单再次出现,我可以看到SecurityContextHolder.getContext.getAuthentication返回null

Spring配置如下所示:


知道原因可能是什么吗?

我认为安全上下文没有持久化回会话。您是否在web.xml中将springSecurityFilterChain配置为过滤器

<filter>
  <filter-name>springSecurityFilterChain</filter-name>
  <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
  <filter-name>springSecurityFilterChain</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

是的,和你贴的一模一样。如何调试上下文是否分散?您可以为spring security启用信息日志记录,这可能会给您一些线索。您还可以添加另一个自己的过滤器,用于打印httpsession的内容。只是为了确保-检查您在尝试此操作的浏览器中是否启用了Cookie。