package cn.changtusoft.KnowledgeManager.Filter;
http://topic.csdn.net/u/20091226/00/09e2979b-7c8c-4991-856d-586a278875c0.html?92881
import java.io.IOException;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.anyfolife.util.data.json4ext.message.JSonMessage;
public class PrivilegeFilter implements Filter{
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpSession session = ((HttpServletRequest)request).getSession();
JSonMessage jm = new JSonMessage();
HttpServletResponse HttpResponse=(HttpServletResponse) response;
//鑾峰彇璇锋眰鐨刄RL
String uri = ((HttpServletRequest) request).getRequestURI();
String [] list = uri.split( "/" );
String realUri = "";
for ( int i = 2 ; i < list.length ; i ++ ) {
realUri += "/" + list[ i ];
}
System.out.println( uri );
System.out.println(realUri+" ----------realuri");
/* // 鑾峰彇瀵瑰簲package鑺傜偣鐨刵amespace
int index = realUri.lastIndexOf( "/" );
String nameSpace = realUri.substring( 0, index+1 );
System.out.println( nameSpace );*/
// 鑾峰彇鎺у埗鏂规硶鍚嶇О
int start = uri.indexOf( "!" ) + 1;
int end = uri.lastIndexOf( "." );
String controllingMethodName = uri.substring( start, end );
String actionName =null;
if(uri.endsWith(".action")){
int start2=uri.lastIndexOf( "/" ) + 1;
int end2 = uri.lastIndexOf( "!" );
if(end2!=-1){
actionName = uri.substring( start2, end2 );
}else{
end2=uri.lastIndexOf(".");
actionName = uri.substring( start2, end2 );
}
System.out.println(controllingMethodName+"-----"+actionName);
}
Set<String> fun=(Set<String>) session.getAttribute("userPurview");
//System.out.println(fun.size());
if(fun!=null){
for(String tmp:fun){
System.out.println(tmp);
}
}else{
System.out.println("fun is null");
}
Pattern p ;
Matcher m = null ;
try{
p = Pattern.compile("(.+?)\\?");
m = p.matcher(realUri);
System.out.println(m.find()+"------鍖归厤缁撴灉");
}catch (Exception e){
e.printStackTrace();
}
int flag=3; //FLAG涓?鏃惰〃绀烘病鏈夎繖涓潈闄?
String[] openList={"login","checkLogin","logout","queryQuestionOtherAnswersByPaging",
"/KnowledgeManager/knowledge/web_queryKnowledgePag","getLearnDetialTree",
"queryLearnDetialPag"};
boolean open=false;
for(String tmp:openList){
if(controllingMethodName.equals(tmp)){
open=true;
}
}
if(open){
flag=1; //FLAG涓?鏃惰〃绀鸿鏉冮檺鍙互鏀捐繃
}else if(session.getAttribute("userName")!=null&&session.getAttribute("userName").equals("admin")){
System.out.println(session.getAttribute("userName")+"-----login user");
flag=1;
}else if(session.getAttribute("userName")==null){
flag=2; //FLAG涓?鏃惰〃绀烘病鏈夌櫥闄?
}else if(m.find()==true){
System.out.println("m.find=true");
if(fun!=null&&fun.contains(m.group(1))){
flag=1;}
}else if(m.find()==false){
System.out.println("m.find=false");
int point = realUri.lastIndexOf( "." );
String str = realUri.substring( 0, point );
System.out.println(str+"-----");
if(fun!=null&&fun.contains(str)){
flag=1;}
}
System.out.println(flag+"------姣旇緝瀹岀殑FLAG");
if(actionName!=null&&actionName.equals("qACtrl")||actionName.startsWith("web_")||actionName.equals("eLearningCtrl")){
flag=1;
}
switch(flag){
case 1:
{chain.doFilter(request, response);
System.out.println("鏉冮檺閫氳繃");
break;}
case 2:
{
System.out.println("娌$櫥闄?);
jm.addProperty( "resultMsg" , "浣犺繕娌℃湁鐧婚檰");
jm.addProperty( JSonMessage.RESULT_FLAG , JSonMessage.RESULT_FAIL );
String jmString = jm.toJSonString();
System.out.println( jmString );
HttpResponse.setHeader("Pragma", "no-cache");
HttpResponse.setHeader("Cache-Control", "no-cache");
HttpResponse.setHeader("Expires", "0");
HttpResponse.setHeader("Content-Type", "text/xml; charset=utf-8");
HttpResponse.setCharacterEncoding("utf-8");
try {
HttpResponse.getWriter().print( jmString );
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;}
case 3:
{
jm.addProperty( "resultMsg" , "浣犳病鏈夎繖涓潈闄?);
jm.addProperty( JSonMessage.RESULT_FLAG , JSonMessage.RESULT_FAIL );
String jmString = jm.toJSonString();
System.out.println( jmString );
HttpResponse.setHeader("Pragma", "no-cache");
HttpResponse.setHeader("Cache-Control", "no-cache");
HttpResponse.setHeader("Expires", "0");
HttpResponse.setHeader("Content-Type", "text/xml; charset=utf-8");
HttpResponse.setCharacterEncoding("utf-8");
try {
HttpResponse.getWriter().print( jmString );
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("娌℃潈闄?);
break;}
}
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}