Filter

 

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

}

 

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值