Java 如何使用Spring Security创建注销?
我正试图找到一种方法,只是设置一个网址,将注销我的用户从系统。这只是为了测试。现在我们正在使用SpringSecuirty中的默认登录页面 这是我的spring-secuirty.xmlJava 如何使用Spring Security创建注销?,java,spring,spring-mvc,spring-security,Java,Spring,Spring Mvc,Spring Security,我正试图找到一种方法,只是设置一个网址,将注销我的用户从系统。这只是为了测试。现在我们正在使用SpringSecuirty中的默认登录页面 这是我的spring-secuirty.xml <?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:beans="http://www.springframew
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.1.xsd">
<global-method-security pre-post-annotations="enabled" />
<http use-expressions="true">
<intercept-url access="hasRole('ROLE_VERIFIED_MEMBER')" pattern="/ask-union**" />
<intercept-url access="hasRole('ROLE_VERIFIED_MEMBER')" pattern="/ask-welfare**" />
<intercept-url pattern='/*' access='permitAll' />
<form-login default-target-url="/ask-union" />
<logout logout-success-url="/" />
<session-management session-fixation-protection="newSession">
<concurrency-control max-sessions="1"/>
</session-management>
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="xxxxx@aol.com.dev" password="testing" authorities="ROLE_VERIFIED_MEMBER" />
ser-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
ser服务>
将此行添加到配置中
<logout logout-url="/sign-out"/>
然后,如果你有一个指向该URL的链接,那么它会将你注销
(将其添加到您的注销成功配置下方)仔细检查您正在使用的URL——根据SJS的示例,绝对路径应该是您的域/projectPath/sign out。如果spring-security.xml文件的相关部分如下所示,那么它应该可以工作:
. . .
如果您能够进行身份验证,那么只需浏览到该路径,它就会将您注销。如果它仍然没有尝试使用URL中指定的中间子目录,即您的域/projectPath/some子目录/log out
你能认证吗?这可能不仅仅是注销方面的失败 这件事我来晚了一点。但答案可能会帮助其他人 使用以下代码。注销成功url是您希望在用户注销后获取的url
<http auto-config="true" use-expressions="true" access-denied-page="/denied">
<logout invalidate-session="true" logout-success-url="/landing" delete-cookies="JSESSIONID" />
</http>
晚会迟到了,但供将来参考——如果您有兴趣了解安全过滤器是如何从XML实例化和配置的,请查看以下软件包:
org.springframework.security.config.annotation.web.configurers
对于注销筛选器配置,这将是LogoutConfigurer类。如果查看LogoutConfigurer.createLogoutFilter()方法,您将看到如何创建默认注销筛选器。这意味着您可以在@Configuration类中执行以下操作:
@Bean
public LogoutFilter logoutFilter() {
// NOTE: See org.springframework.security.config.annotation.web.configurers.LogoutConfigurer
// for details on setting up a LogoutFilter
SecurityContextLogoutHandler securityContextLogoutHandler = new SecurityContextLogoutHandler();
securityContextLogoutHandler.setInvalidateHttpSession(true);
LogoutFilter logoutFilter = new LogoutFilter("/", securityContextLogoutHandler);
logoutFilter.setLogoutRequestMatcher(new AntPathRequestMatcher("/logout"));
return logoutFilter;
}
如果您有,那么您可以通过bean进一步配置,或者自动拾取该bean,因为它的方法名是logoutFilter()需要更多的操作。。怎么搞的?有错误吗?它们是如何表现出来的?另外,根据@cabbagery下面的示例,将注销url与注销成功url一起滚到标记中
@Bean
public LogoutFilter logoutFilter() {
// NOTE: See org.springframework.security.config.annotation.web.configurers.LogoutConfigurer
// for details on setting up a LogoutFilter
SecurityContextLogoutHandler securityContextLogoutHandler = new SecurityContextLogoutHandler();
securityContextLogoutHandler.setInvalidateHttpSession(true);
LogoutFilter logoutFilter = new LogoutFilter("/", securityContextLogoutHandler);
logoutFilter.setLogoutRequestMatcher(new AntPathRequestMatcher("/logout"));
return logoutFilter;
}