SpringSocial默认的退出的Url为logOut,并且退出成功后跳转的Url是登录页面的Url+?logOut的形式。
所以在浏览器的安全配置类中添加如下配置:
.logout()
.logoutUrl("/signOut")
.logoutSuccessHandler(logoutSuccessHandler)//退出成功后自定义的处理逻辑
// .logoutSuccessUrl("退出成功跳转的Url")//两者配置一个就可以
.deleteCookies("JSESSIONID")//同时删除Cookie
.and()
创建ImoocLogoutSuccessHandler 实现 LogoutSuccessHandler用来处理退出的逻辑处理,是返回json还是根据用户的配置返回Html
public class ImoocLogoutSuccessHandler implements LogoutSuccessHandler {
private Logger logger = LoggerFactory.getLogger(getClass());
public ImoocLogoutSuccessHandler(String signOutSuccessUrl) {
this.signOutSuccessUrl = signOutSuccessUrl;
}
private String signOutSuccessUrl;
private ObjectMapper objectMapper = new ObjectMapper();
@Override
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
throws IOException, ServletException {
logger.info("退出成功");
//退出登录的Url如果是默认的空,那么返回的是json数据
if (StringUtils.isBlank(signOutSuccessUrl)) {
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write(objectMapper.writeValueAsString(new SimpleResponse("退出成功")));
} else {
response.sendRedirect(signOutSuccessUrl);
}
}
}
并在BrowserSecurityBeanConfig类中做相应的Bean的注入:
@Bean
@ConditionalOnMissingBean(LogoutSuccessHandler.class)
public LogoutSuccessHandler logoutSuccessHandler(){
return new ImoocLogoutSuccessHandler(securityProperties.getBrowser().getSignOutUrl());
}
接下来在BrowserProperties类中配置退出成功后跳转的Url,默认为空,是返回json:
public class BrowserProperties {
private String signUpUrl = "/imooc-signUp.html";
private String signOutUrl;//退出的url,默认为空
在项目的Index.html中增加退出的链接:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
index<br>
<a href="/signOut">退出</a>
</body>
</html>
在配置文件中配置退出成功跳转的Url,如果不配置是默认返回json:
#退出的Url
imooc.security.browser.signOutUrl = /demo-logout.html
启动项目并测试,成功。
说明:本系列博客是记录慕课网中的教程的学习,以便我自己复习回忆。文中涉及的一些细节问题请参考慕课网中相关视频。
贴出慕课网视频教程地址: http://coding.imooc.com/class/134.html