Od pewnego czasu próbuję zrozumieć wiosenną ochronę, a ja dostałem z większością rzeczy poza aspektem logout
. Przechodząc przez inne pytania na temat SO, czułem, że większość z nich boryka się z problemami związanymi z sesją, która nie kończy się.Wylogowanie z wylogowania wiosennego powoduje NullPointerException
Ja natomiast mam do czynienia z różnymi rodzajami kłopotów. Mój plik XML zabezpieczeń jest skonfigurowany w następujący sposób:
<http path-type="ant" auto-config="false" use-expressions="true"
access-denied-page="/?login_error=2">
<intercept-url pattern="/web/open/**" access="permitAll" />
<intercept-url pattern="/web/**" access="isAuthenticated()" />
<form-login login-processing-url="/static/j_spring_security_check"
default-target-url="/web/base/view" always-use-default-target="true"
login-page="/" authentication-failure-url="/?login_error=1" />
<logout logout-url="/static/j_spring_security_logout"
invalidate-session="true" logout-success-url="/" />
</http>
W moim web.xml
ja już zmapowali login controller
do korzenia kontekstowego [Using listę welcome-file
], a także posiadają wymagane springSecurityFilterChain
konfigurację. Teraz operacje logowania przebiegają idealnie. Docelowa JSP ma link wylogowania jako:
<a href="<c:url value="/static/j_spring_security_logout"/>">Logout</a>
Jednak, gdy klikam na link wylogowania, pojawia się upiorny NullPointerException
. Czy ktoś może mi powiedzieć, czy popełniam jakiś rażący błąd?
Wyjątek stosu:
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)
Dzięki za poświęcenie czasu.
'rozciąga AbstractAuthenticationTargetUrlRequestHandler realizuje LogoutSuccessHandler' można zastąpić przez 'extends SimpleUrlLogoutSuccessHandler'. – lschin
gee - twoja rada zadziałała, ale to nie ma dla mnie żadnego sensu. żadna z dokumentacji nie wspomina o czymś takim. nie rozumiem, dlaczego 'logout' nie działa bez' ref-handler'a '? – anirvan
@Ischin: w rzeczywistości nie potrzebujesz własnej implementacji. ' ... ' wystarczy - ale może chcesz zrobić kilka innych rzeczy. –
jeha