锁定老帖子 主题:CAS不能使用中文账户登录问题的解决
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-11
最后修改:2009-03-11
此类问题主要为CAS系统与web项目对页面编码的设置不一致造成的。 解决方法如下: 1. 在CAS服务端的WEB-INF\web.xml中添加: <filter> <filter-name>Set Character Encoding</filter-name> <filter-class>filters.SetCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>ignore</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>Set Character Encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
下边为SetCharacterEncodingFilter代码: package filters; import java.io.IOException; import javax.servlet.*; public class SetCharacterEncodingFilter implements Filter { public SetCharacterEncodingFilter() { encoding = null; filterConfig = null; ignore = true; } public void destroy() { encoding = null; filterConfig = null; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { if (ignore || request.getCharacterEncoding() == null) { String encoding = selectEncoding(request); if (encoding != null) request.setCharacterEncoding(encoding); } chain.doFilter(request, response); } public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; encoding = filterConfig.getInitParameter("encoding"); String value = filterConfig.getInitParameter("ignore"); if (value == null) ignore = true; else if (value.equalsIgnoreCase("true")) ignore = true; else if (value.equalsIgnoreCase("yes")) ignore = true; else ignore = false; } protected String selectEncoding(ServletRequest request) { return encoding; } protected String encoding; protected FilterConfig filterConfig; protected boolean ignore; }
2. 修改 WEB-INF\view\jsp\protocol\2.0\casServiceValidationSuccess.jsp 在该文件页首添加<%@ page pageEncoding="GBK"%>。 这里对pageEncoding的赋值取决于CAS系统所管理的项目中对页面编码的设置。 例如,利用CAS对helper项目进行登录验证管理,Passport (CAS服务端,负责对用户进行验证)中编码为“UTF-8”而helper中编码为“GBK”,casServiceValidationSuccess.jsp负责在CAS对用户验证成功后将用户信息转往helper/CAS/login.jsp页面,用户信息发送与接受处的编码不一致,导致在login.jsp上不能获得正确的中文信息(获得的均为问号)。因此应在casServiceValidationSuccess.jsp页面上添加<%@ page pageEncoding="GBK"%>, 从而与helper/CAS/login.jsp上的页面编码(GBK)设置相一致。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-03-11
javafuns 写道 CAS 是指 MIT 的那个认证服务系统吗? CAS(Central Authentication Service)是耶鲁大学开发的一个开源的SSO(single sign on,单点登录)系统。它提供了丰富的客户端库,如Java, .NET, PHP, Perl等版本,使用这些库用户可以方便地给自己的应用程序加上CAS支持。 |
|
返回顶楼 | |
发表时间:2009-04-22
呵呵,验证通过,谢谢楼主,楼主辛苦啦!
|
|
返回顶楼 | |
浏览 4960 次