spring security logout导致NullPointerException
我一直试图了解弹簧安全性一段时间,除了logout
方面,我已经解决了大部分问题。 通过关于SO的其他问题,我觉得他们中的大多数都面临与会话无关的问题。
另一方面,我面临着相当不同的麻烦。 我的安全XML文件配置如下:
在我的web.xml
我已经将login controller
映射到上下文根[使用welcome-file
列表],并且还具有所需的springSecurityFilterChain
设置。 现在登录操作运行完美。 目标JSP具有注销链接:
<a href="https://stackoverflow.com/questions/7325655/spring-security-logout-causes-nullpointerexception/">Logout
但是,每当我点击注销链接时,我都会遇到可怕的NullPointerException
。 如果我在这里犯了一些明显的错误,有人能告诉我吗?
exception堆栈:
java.lang.NullPointerException at java.util.Hashtable.get(Hashtable.java:334) at org.apache.tomcat.util.http.Parameters.getParameterValues(Parameters.java:116) at org.apache.tomcat.util.http.Parameters.getParameter(Parameters.java:127) at org.apache.catalina.connector.Request.getParameter(Request.java:1133) at org.apache.catalina.connector.RequestFacade.getParameter(RequestFacade.java:384) at javax.servlet.ServletRequestWrapper.getParameter(ServletRequestWrapper.java:140) at org.springframework.security.web.authentication.AbstractAuthenticationTargetUrlRequestHandler.determineTargetUrl(AbstractAuthenticationTargetUrlRequestHandler.java:86) at org.springframework.security.web.authentication.AbstractAuthenticationTargetUrlRequestHandler.handle(AbstractAuthenticationTargetUrlRequestHandler.java:67) at org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler.onLogoutSuccess(SimpleUrlLogoutSuccessHandler.java:28) at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:100) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:168) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
感谢您抽出宝贵的时间。
获取请求参数时, AbstractAuthenticationTargetUrlRequestHandler
的determineTargetUrl
方法似乎失败。 对我来说,通常可以提供defaultTargetUrl
并将alwaysUseDefaultTargetUrl
设置为true
,其中determineTargetUrl
始终返回给定的URL并阻止URL确定魔术。
我通过注册我自己的LogoutSuccessHandler
实现来做到这一点,如:
而不是logout-success-url
。
LogoutSuccessHandler
看起来很简单:
public class MyLogoutSuccessHandler extends AbstractAuthenticationTargetUrlRequestHandler implements LogoutSuccessHandler { @Override public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication throws IOException, ServletException { // maybe do some other things ... super.handle(request, response, authentication); } }
在为自定义LogoutSuccessHandler
定义bean时,在安全上下文中将注销URL设置为defaultTargetUrl
:
- 为什么int exp1 = 14/20 * 100; 在java中等于’0’?
- 在gradle中更改生成代码的输出目录
- java字符串连接和实习
- 如何在这个ubuntu终端命令中引用Main一次:“javac Main.java && java Main”?
- Jetty在多部分表单请求上抛出“多部分请求的缺少内容”
- 如何以编程方式检查是否在使用Java的ubuntu上安装了软件实用程序
- 使用values()创建枚举常量的最终Java类数组
- FileNotFoundException Jasperreports
- ClassNotFoundException:org.eclipse.xtext.junit_2.4.3.v201309030823找不到junit.framework.TestCase