一、常识了解 1.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立; 2.java.nio.charset.Charset.defaultCharset() 获得平台默认字符编码; 3.getBytes() 是通过平台默认字符集进行编码; 二、中文乱码出现 在学习任何一门技术时
CAS logout的时候,默认是会重定向到cas server端的logout页面。
现在的需求是重定向到登录页面。
在应用中, 我还遇到直接ogout(只做清空session, cookie), 而不去重定向到cas 的logout页面,这种情况下:
如果不关闭浏览器, 直接再次输入Application的URL, 会绕过CAS认证,照常登入。
吃问题困扰了几天,看了一下CASserver端的代码,恍然大悟:
LogoutController有一个开关变量:
Java代码
private boolean followServiceRedirects;
并有一段逻辑: 项目要求struts2和servlet能够共存,就是struts的请求发给struts处理,servlet的请求发给servlet处理。目前web.xml文件应该是类似于如下的配置: struts2org.apache.struts2.dispatcher.ng.filte
Java代码
if (this.followServiceRedirects && service != null) {
return new ModelAndView(new RedirectView(service));
}
service是个啥:
Java代码
final String service = request.getParameter("service");
如果在logout的url后面加上你要重定向的那个页面, 就可以自定义登出页面了:
所以,我的方案就出来了:
在cas-servlet.xml中,设置logoutController的followServiceRedirects=true
Xml代码
p:centralAuthenticationService-ref="centralAuthenticationService"
p:logoutView="casLogoutView"
p:warnCookieGenerator-ref="warnCookieGenerator"
p:ticketGrantingTicketCookieGenerator-ref="ticketGrantingTicketCookieGenerator"
p:followServiceRedirects="true"/>
application在登出的时候,除了清空session和cookie外, 重定向的url加上:
Java代码
var apphostname = window.location.hostname
var appport = window.location.port;
var callbackurl='?service=http%3A%2F%2F'+apphostname +'%3A'+appport + '%2Fapplication' Java代码
window.location = logoutUrl+ callbackurl;