解决与OA做单点CAS认证的时候乱码问题的心得

一般情况下,我们在做BS系统的时候,都有自己的一套过滤器,来处理所有访问的连接,例如 

public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) 
throws IOException, ServletException 

HttpServletRequest httpreq = (HttpServletRequest) arg0; 
String forwardURL = httpreq.getRequestURI().substring(httpreq.getContextPath().length()) ; 

//System.out.println("url: "+forwardURL) ; 

HttpSession session = httpreq.getSession(false); 
if (IsAccess(forwardURL)) 


if (session == null || session.getAttribute("AMSSession") == null) 

HttpServletResponse httprep = (HttpServletResponse) arg1;
System.out.println("没有登陆: "+forwardURL) ; 
System.out.println("没有: "+httpreq.getContextPath()) ; 

String Host = httpreq.getServerName(); 
int port = httpreq.getServerPort(); 
String App = httpreq.getContextPath(); 
if (App==null||App.trim().equals("")||App.trim().length()==1){ 
App = "/"; 
}else{ 
String strlast = new String(App.substring(App.length()-1)); 
if (!strlast.equals("/")) App = App + "/"; 

String loginUrl = "http://"+ Host + ":" + port + App + "login.jsp"; 

// String loginUrl = AmsGlobals.getAmsProperty("loginURL") ; 
PrintWriter out = httprep.getWriter();
out.println("<html>"); 
out.println("<script>"); 
out.println("window.top.location = '"+loginUrl+"';"); 
out.println("</script>"); 
out.println("</html>");
return ; 

else 

arg0.setCharacterEncoding("GBK"); 
arg2.doFilter(arg0, arg1); 


else 

arg0.setCharacterEncoding("GBK"); 
arg2.doFilter(arg0, arg1); 



在这里会将所有连接通过 setCharacterEncoding 处理成GBK,不过当我们做单点的时候,可能会用到OA的一套标准,会将 

OA的过滤信息添加到我们系统的WEB.XML里,如果这样,处理不好可能会导致乱码,需要在添加的时候,将不需要的过滤条件删除掉。 

本文地址:http://www.dfwlt.com/forum.php?mod=viewthread&tid=242&extra=page%3D1,转发请保留这个地址,谢谢

posted on 2013-03-06 12:26  小S资料屋  阅读(401)  评论(0编辑  收藏  举报