`

struts2拦截器 获得请求方法名+获得请求参数

 
阅读更多

SSI框架为基础开发的,hulian平台

struts2拦截器里如何知道你请求的是那个方法
使用:invocation.getInvocationContext().getName(); //输出Priv_queryPriv,这正是我访问的Action中的方法。

 

1.struts.xml中这么定义的

Xml代码 复制代码 收藏代码
  1. <struts>  
  2.     <!-- character filter -->  
  3.     <constant name="struts.i18n.encoding" value="utf-8" />  
  4.     <constant name="struts.multipart.saveDir" value="/tmp" />  
  5.     <constant name="struts.multipart.maxSize" value="1000000000" />  
  6.     <!-- CONFIG Global Exception -->  
  7.        
  8.     <package name="basePriv" extends="struts-default">  
  9.         <interceptors>  
  10.             <interceptor name="myPrivInterceptor" class="PrivInterceptor"/>  
  11.             <interceptor-stack name="b2cplatPrivInterceptor">  
  12.                 <interceptor-ref name="myPrivInterceptor">  
  13.                     <param name="includeMethods"></param>  
  14.                     <param name="excludeMethods">  
  15.                         loginMain,loginTop,loginSwitch,loginRight,login,leftMenuShow,   
  16.                         queryCityList,queryInOrOutAreaList,queryDistricts   
  17.                     </param>  
  18.                 </interceptor-ref>  
  19.                 <interceptor-ref name="defaultStack"/>  
  20.             </interceptor-stack>  
  21.         </interceptors>  
  22.            
  23.         <default-interceptor-ref name="b2cplatPrivInterceptor"/>  
  24.            
  25.         <global-results>  
  26.             <result name="privError">/errorPrivPage.jsp</result>  
  27.             <result name="updateEmpPassword">/jsp/phone/xxxx.jsp</result>  
  28.             <result name="loginPage" type="redirect">/jsp/phone/login/trunToLogin.jsp</result>  
  29.         </global-results>  
  30.            
  31.         <global-exception-mappings>  
  32.             <exception-mapping result="error" exception="java.lang.Exception">/errorPage.jsp   
  33.             </exception-mapping>  
  34.         </global-exception-mappings>  
  35.     </package>  
  36.        
  37.        
  38. <package name="managerPlatform" extends="basePriv" namespace="/">  
  39.     <action name="*_*" class="{1}Action" method="{2}">  
  40.         <result name="success">${successPath}</result>  
  41.         <result name="error">${errorPath}</result>  
  42.         <result name="input">${inputPath}</result>  
  43.         <result name="redirectAction" type="redirectAction">${redirectActionPath}</result>  
  44.         <result name="doChain" type="chain">${chainPath}</result>  
  45.         <result name="redirect" type="redirect">${redirectPath}</result>  
  46.         <result name="print" type="stream">  
  47.             <param name="contentType">application/vnd.ms-excel</param>  
  48.             <param name="inputName">inputStream</param>  
  49.             <param name="contentDisposition">filename="${printFileName}"</param>  
  50.             <param name="bufferSize">1024</param>  
  51.         </result>  
  52.     </action>  
  53. </package>  
  54.            
  55. </struts>  
<struts>
	<!-- character filter -->
	<constant name="struts.i18n.encoding" value="utf-8" />
	<constant name="struts.multipart.saveDir" value="/tmp" />
	<constant name="struts.multipart.maxSize" value="1000000000" />
	<!-- CONFIG Global Exception -->
	
	<package name="basePriv" extends="struts-default">
		<interceptors>
			<interceptor name="myPrivInterceptor" class="PrivInterceptor"/>
			<interceptor-stack name="b2cplatPrivInterceptor">
				<interceptor-ref name="myPrivInterceptor">
					<param name="includeMethods"></param>
					<param name="excludeMethods">
						loginMain,loginTop,loginSwitch,loginRight,login,leftMenuShow,
						queryCityList,queryInOrOutAreaList,queryDistricts
					</param>
				</interceptor-ref>
				<interceptor-ref name="defaultStack"/>
			</interceptor-stack>
		</interceptors>
		
		<default-interceptor-ref name="b2cplatPrivInterceptor"/>
		
		<global-results>
			<result name="privError">/errorPrivPage.jsp</result>
			<result name="updateEmpPassword">/jsp/phone/xxxx.jsp</result>
			<result name="loginPage" type="redirect">/jsp/phone/login/trunToLogin.jsp</result>
		</global-results>
		
		<global-exception-mappings>
			<exception-mapping result="error" exception="java.lang.Exception">/errorPage.jsp
			</exception-mapping>
		</global-exception-mappings>
	</package>
	
	
<package name="managerPlatform" extends="basePriv" namespace="/">
	<action name="*_*" class="{1}Action" method="{2}">
		<result name="success">${successPath}</result>
		<result name="error">${errorPath}</result>
		<result name="input">${inputPath}</result>
		<result name="redirectAction" type="redirectAction">${redirectActionPath}</result>
		<result name="doChain" type="chain">${chainPath}</result>
		<result name="redirect" type="redirect">${redirectPath}</result>
		<result name="print" type="stream">
			<param name="contentType">application/vnd.ms-excel</param>
			<param name="inputName">inputStream</param>
			<param name="contentDisposition">filename="${printFileName}"</param>
			<param name="bufferSize">1024</param>
		</result>
	</action>
</package>
		
</struts>

 2.Action这么写

Java代码 复制代码 收藏代码
  1. /**  
  2.  * 权限信息控制  
  3.  * @author  ken  
  4.  * @date 2011-9-13 下午15:00:46  
  5.  */  
  6. @Scope("prototype")   
  7. @Controller("PrivAction")   
  8. public class PrivAction extends BaseAction{   
  9.   
  10.     private static final long serialVersionUID = 1L;   
  11.     static final Logger log = Logger.getLogger(PrivAction.class);   
  12.        
  13.     @Autowired  
  14.     private PrivService privService;   
  15.        
  16.     /* 权限模型 */  
  17.     private TEmployeePriv employeePriv;   
  18.        
  19.     /**  
  20.      * 权限查询  
  21.      * @return  
  22.      */  
  23.     public String queryPriv(){   
  24.         if(employeePriv==null){   
  25.             employeePriv = new TEmployeePriv();   
  26.             successPath = "/jsp/phone/priv/priv/privList.jsp";   
  27.             return SUCCESS;   
  28.         }   
  29.         try {   
  30.             entitys = this.privService.queryAllPriv(employeePriv);   
  31.         } catch (Exception e) {   
  32.             log.error("",e);   
  33.         }   
  34.            
  35.         successPath = "/jsp/phone/priv/priv/privList.jsp?flag=true";   
  36.         return SUCCESS;   
  37.     }   
  38. }  
/**
 * 权限信息控制
 * @author  ken
 * @date 2011-9-13 下午15:00:46
 */
@Scope("prototype")
@Controller("PrivAction")
public class PrivAction extends BaseAction{

	private static final long serialVersionUID = 1L;
	static final Logger log = Logger.getLogger(PrivAction.class);
	
	@Autowired
	private PrivService privService;
	
	/* 权限模型 */
	private TEmployeePriv employeePriv;
	
	/**
	 * 权限查询
	 * @return
	 */
	public String queryPriv(){
		if(employeePriv==null){
			employeePriv = new TEmployeePriv();
			successPath = "/jsp/phone/priv/priv/privList.jsp";
			return SUCCESS;
		}
		try {
			entitys = this.privService.queryAllPriv(employeePriv);
		} catch (Exception e) {
			log.error("",e);
		}
		
		successPath = "/jsp/phone/priv/priv/privList.jsp?flag=true";
		return SUCCESS;
	}
}

 3.struts2拦截器

Java代码 复制代码 收藏代码
  1.  /**  
  2.   * 权限拦截器Interceptor  
  3.  * @author mengxianjun  
  4.  * @date 2011-4-8 下午03:07:24  
  5.  *  
  6.  */  
  7.   
  8. @SuppressWarnings("serial")   
  9. @Component"PrivInterceptor" )   
  10. @Scope("prototype")   
  11. public class PrivInterceptor extends MethodFilterInterceptor{   
  12.        
  13.     @Resource(name = "EmployeeService")   
  14.     private EmployeeService empSafeService;//工号安全Service   
  15.        
  16.     @Resource(name="EmployeeRoleService")   
  17.     private EmployeeRoleService empRoleService;   
  18.        
  19.     /* (non-Javadoc)  
  20.      * @see com.opensymphony.xwork2.interceptor.MethodFilterInterceptor#doIntercept(com.opensymphony.xwork2.ActionInvocation)  
  21.      * @author mengxianjun  
  22.      * @date 2011-4-8 下午03:07:24  
  23.      */  
  24.        
  25.     @SuppressWarnings("unchecked")   
  26.     @Override  
  27.     protected String doIntercept(ActionInvocation invocation) throws Exception {   
  28.   
  29.         System.out.println("============"+invocation.getInvocationContext().getName());   
  30.         System.out.println("============"+invocation.getInvocationContext().getLocale());   
  31.         System.out.println("============"+invocation.getInvocationContext().getParameters());   
  32.            
  33.            
  34.         System.out.println("执行到拦截器里。。。。");   
  35.            
  36.         ActionContext act = invocation.getInvocationContext();   
  37.            
  38.         //获得session   
  39.         Map session = invocation.getInvocationContext().getSession();   
  40.            
  41.         TEmployeeInfo sessionInfo = (TEmployeeInfo) session.get("user");   
  42.            
  43.         String employee_id="";   
  44.            
  45.         /**  
  46.          * 一、是否登录  
  47.          */  
  48.         try  
  49.         {   
  50.             employee_id = sessionInfo.getEmployeeId();   
  51.         }   
  52.         catch( NullPointerException e )   
  53.         {   
  54.             act.put("message""Session过期,请重新登录!");   
  55.             return "loginPage";   
  56.         }   
  57.            
  58. /*=========================================================单点登录判断============================================*/  
  59.         HashMap<String, String> map = (HashMap<String, String>)  ServletActionContext.getServletContext().getAttribute("userList");   
  60.         String sessionID_User = map.get( employee_id ); //登录用户session的ID   
  61.         String sessionID_Now = ServletActionContext.getRequest().getSession().getId(); //当前session的ID   
  62.            
  63.         if( ! sessionID_User.trim().equals(sessionID_Now) )   
  64.         {   
  65.             act.put("message""此账号已登录!");   
  66.             return "privError";   
  67.         }   
  68. /*=========================================================单点登录判断============================================*/  
  69.            
  70.         /**  
  71.          * 二、登录成功后,根据URL进行权限判断  
  72.          */  
  73.         if( !"".equals(employee_id.trim()) && null!=employee_id )   
  74.         {   
  75.             /**  
  76.              * 2.1判断工号登录后,业务密码是否为123456,是跳转到商户安全设置,修改业务密码  
  77.              */  
  78.             /*TEmployeeSafe empSafe = empSafeService.queryEmployeSafe(employee_id);  
  79.             if( null!=empSafe )  
  80.             {  
  81.                 String MD5password = KeyedDigestMD5.getKeyedDigest("123456","").toUpperCase();//获得123456的MD5值  
  82.                 String employeePass = empSafe.getEmployeePass();//获得登录密码  
  83.                 String employeePass2 = empSafe.getEmployeePass2();//获得工号业务密码  
  84.                 if( MD5password.equals(employeePass) || MD5password.equals(employeePass2) )  
  85.                 {  
  86.                     act.put("message", "欢迎使用本系统,您的登录密码、业务密码过于简单,请修改!");  
  87.                     return "updateEmpPassword";  
  88.                 }  
  89.             }*/  
  90.                
  91.                
  92.             /**  
  93.              * 2.2截取请求URL  
  94.              */  
  95.             HttpServletRequest request = ServletActionContext.getRequest();   
  96.                
  97.             String currentURL = request.getRequestURI();   
  98.             String targetURL = "";   
  99.                
  100.             if( -1 != currentURL.indexOf("?") )//普通<form>标签是?分隔传来的参数   
  101.             {   
  102.                 String paramURL = currentURL.substring(currentURL.indexOf("?",0), currentURL.length());//参数URL   
  103.                    
  104.                 int targetLength = currentURL.length() - paramURL.length();//去掉请求参数Length   
  105.                    
  106.                 targetURL = currentURL.substring(currentURL.indexOf("/",1), targetLength);   
  107.                 System.out.println("去掉请求参数路径URL:"+targetURL);   
  108.             }   
  109.             else if( -1 != currentURL.indexOf(";") )//struts2标签<s:form>标签是;分隔传来的参数   
  110.             {   
  111.                 String paramURL = currentURL.substring(currentURL.indexOf(";",0), currentURL.length());//参数URL   
  112.                    
  113.                 int targetLength = currentURL.length() - paramURL.length();//去掉请求参数Length   
  114.                    
  115.                 targetURL = currentURL.substring(currentURL.indexOf("/",1), targetLength);   
  116.                 System.out.println("去掉请求参数路径URL:"+targetURL);   
  117.             }   
  118.             else  
  119.             {   
  120.                 targetURL = currentURL.substring(currentURL.indexOf("/",1), currentURL.length());   
  121.                 System.out.println("请求路径URL:"+targetURL);   
  122.             }   
  123.                
  124.                
  125.             /**  
  126.              * 2.3必须保证当前用户:1.工号必须开启2.角色已分配  3.角色已启用   4.角色有权限集合  
  127.              */  
  128.             if("12".equals(sessionInfo.getState()))   
  129.             {   
  130.                 act.put("message""工号已锁定!");   
  131.                 return "privError";   
  132.             }   
  133.             else if("15".equals(sessionInfo.getState()))   
  134.             {   
  135.                 act.put("message""工号已注销!");   
  136.                 return "privError";   
  137.             }   
  138.             else if( sessionInfo.getRoleState()==null || "".equals(sessionInfo.getRoleState()) )   
  139.             {   
  140.                 act.put("message""未分配角色!");   
  141.                 return "privError";   
  142.             }   
  143.             else if( !"10".equals(sessionInfo.getRoleState()) )   
  144.             {   
  145.                 act.put("message""该角色未启用!");   
  146.                 return "privError";   
  147.             }   
  148.             else  
  149.             {   
  150.                 try  
  151.                 {   
  152.                     /*1.得到中间表TRolePriv集合*/  
  153.                     TRolePriv rp = new TRolePriv();   
  154.                     rp.setRoleNum(sessionInfo.getRoleNum());   
  155.                     List<TRolePriv> rolePrivList = empRoleService.queryRolePriv(rp);   
  156.                        
  157.                     /*2.根据中间表TRolePriv,生成TEmployeePriv集合*/  
  158.                     List<TEmployeePriv> privList = new ArrayList<TEmployeePriv>();   
  159.                     for( TRolePriv trp : rolePrivList )   
  160.                     {   
  161.                         TEmployeePriv myPriv = empRoleService.queryPrivById(trp.getPrivNum());   
  162.                         if(myPriv!=null&&myPriv.getPrivUrl()!=null&&!"".equals(myPriv.getPrivUrl())){   
  163.                             privList.add(myPriv);//去掉一级菜单添加进privList,privUrl为空是一级菜单   
  164.                         }   
  165.                     }   
  166.                        
  167.                     /*3.权限privUrl与targetURL比较*/  
  168.                     if( privList.size()>0 )   
  169.                     {   
  170.                         int privState = 0;   
  171.                            
  172.                         for( TEmployeePriv p : privList )   
  173.                         {   
  174.                             /**  
  175.                              * 对比去掉请求参数后的URL是否一致,即/Login_login  
  176.                              */  
  177.                             String privUrl = p.getPrivUrl();//TEmployeePriv中privUrl,可能带参数,可能不带参数   
  178.                                
  179.                             if(-1!=privUrl.indexOf("?",0)){   
  180.                                 String paramPrivURL = privUrl.substring(privUrl.indexOf("?",0), privUrl.length());//参数URL   
  181.                                 int targetPrivLength = privUrl.length() - paramPrivURL.length();//去掉请求参数Length   
  182.                                 privUrl = privUrl.substring(privUrl.indexOf("/",0), targetPrivLength);//TEmployeePriv中privUrl去掉参数   
  183.                             }   
  184.                                
  185.                             if( privUrl.equals(targetURL) )   
  186.                             {   
  187.                                 privState = 1;   
  188.                             }   
  189.                         }   
  190.                         if1 == privState )   
  191.                         {   
  192.                             return invocation.invoke();   
  193.                         }   
  194.                         else  
  195.                         {   
  196.                             System.out.println("-------得到Priv权限集合,但是无访问权限---------");   
  197.                             act.put("message""您没有权限  , 拒绝访问!");   
  198.                             return "privError";   
  199.                         }   
  200.                     }   
  201.                     else  
  202.                     {   
  203.                         act.put("message""您没有相应权限 , 拒绝访问!");   
  204.                         return "privError";   
  205.                     }   
  206.                 }   
  207.                 catch( NullPointerException e )   
  208.                 {   
  209.                     act.put("message""您没有权限 , 拒绝访问!");   
  210.                     return "privError";   
  211.                 }   
  212.             }   
  213.         }   
  214.         else  
  215.         {   
  216.             act.put("message""Session过期,请重新登录!");   
  217.             return "loginPage";   
  218.         }   
  219.     }   
  220. }  
分享到:
评论

相关推荐

    struts2拦截器的使用方法

    ### Struts2拦截器的使用方法 #### 一、Struts2拦截器概述 Struts2框架中的拦截器(Interceptor)是一种重要的机制,用于在Action执行前后进行一系列处理,比如参数验证、数据预处理等。它能够帮助开发者更加灵活...

    Struts2拦截器及其用法详细说明

    在Struts2中,这些处理逻辑被封装在独立的类中,当请求到达Action之前,拦截器会按照预定义的顺序执行,执行完后再继续进行Action处理,最后返回结果。拦截器可以用于日志记录、权限验证、性能监控等多种场景。 **...

    详解Struts2拦截器

    - **拦截器的核心功能**:Struts2拦截器可以动态地拦截发送到指定Action的请求,并在Action执行前后插入自定义的逻辑处理。 - **代码重用原则**:通过拦截器机制,可以将多个Action中需要重复指定的代码提取出来,...

    struts2 拦截器

    2. **拦截器链**:在Struts2中,多个拦截器可以形成一个拦截器链,每个拦截器按照定义的顺序依次执行。如果所有拦截器都允许Action执行,那么Action的结果将被传递到下一个拦截器,直到整个链执行完毕。 ### 二、...

    struts2 拦截器实例

    2. **默认拦截器栈**:`defaultStack`包含了Struts2内置的一些拦截器,如`params`(处理参数),`i18n`(处理国际化),`exception`(处理异常)等。 3. **应用全局拦截器**:现在,所有Action都会在执行前经过`...

    struts2拦截器

    标题“struts2拦截器”指的是Struts2框架中的拦截器机制,这是一个关键的组件,可以让我们在不修改实际业务代码的情况下,实现对请求处理流程的扩展和定制。 描述中提到的“基于struts2的拦截器测试,实现了页面的...

    Struts2 拦截器

    拦截器是Struts2框架的核心特性之一,它们扮演着处理请求、增强功能和实现业务逻辑的角色。在Struts2中,拦截器就像过滤器一样工作,通过链式调用在动作执行前后进行预处理和后处理。 首先,我们来理解一下拦截器的...

    Struts2拦截器原理分析

    2. **拦截**:当一个请求到达Action时,Struts2会根据配置的拦截器栈顺序,先调用每个拦截器的`intercept()`方法,然后才执行Action的业务逻辑。 3. **后处理**:Action执行完毕后,Struts2会逆序遍历拦截器栈,调用...

    Struts2拦截器源程序

    Struts2框架会根据配置创建拦截器实例,然后在每次请求时调用其`intercept()`方法。拦截器实例通常是线程安全的,因此对于多线程环境,Struts2会为每个请求创建新的ActionInvocation实例,但拦截器实例是共享的。 *...

    struts2拦截器应用小例子

    当请求到达控制器时,Struts2会依次调用这个栈中的拦截器,每个拦截器都有机会处理请求,然后决定是否将请求传递给下一个拦截器或直接返回响应。 创建一个简单的Struts2拦截器,你需要遵循以下步骤: 1. 创建拦截...

    Struts2拦截器实现权限控制demo

    在Struts2中,我们可以通过拦截器来检查用户是否具有访问某个Action或方法的权限。以下是一个简单的步骤: 1. 创建权限拦截器:首先,我们需要编写一个实现了`Interceptor`接口的类,例如`AuthorizationInterceptor...

    Struts2拦截器源码

    例如,`struts-default.xml`中包含了默认的拦截器栈,如`params`拦截器用于处理请求参数,`exception`拦截器用于处理异常,`validation`拦截器进行数据校验。 在深入源码之前,我们需要了解几个关键类: 1. `...

    struts2拦截器解决请求乱码和输出乱码.txt

    struts2 拦截器 解决 请求乱码 和 输出乱码 java

    struts2拦截器实现拦截不文明字迹

    当一个请求到来时,Struts2会按照配置的顺序依次执行这些拦截器,最后调用Action方法。 要实现拦截不文明字迹,我们首先需要创建一个自定义的拦截器类。这个类需要继承自`...

    使用struts2拦截器对登陆权限验证

    当请求到达Action时,Struts2会调用这个链上的所有拦截器,然后才执行实际的动作方法。通过在拦截器中实现权限验证,我们可以在用户尝试访问受保护资源之前检查其登录状态。 接下来,我们创建一个自定义的登录拦截...

    Struts2 拦截器过滤方法(二十八)

    在"Struts2 拦截器过滤方法(二十八)"的博文中,可能更具体地讲解了一些高级用法,如条件判断拦截、组合拦截器、拦截器的堆栈管理和自定义参数传递等。 对于项目中的源码部分(src目录),可能包含了自定义拦截器...

    创建自己struts2拦截器

    在Struts2中,拦截器是AOP(面向切面编程)的一种实现,它可以监控、修改或增强方法调用的行为。下面我们将详细介绍如何创建自定义的Struts2拦截器。 1. **理解Struts2拦截器工作原理** Struts2中的拦截器是一个...

    struts2拦截器国际化

    在Struts2中,拦截器(Interceptor)是实现业务逻辑控制和增强功能的重要机制,而国际化(Internationalization,简称i18n)则能帮助我们构建支持多语言的Web应用。下面将详细解释这两个知识点以及它们如何在Struts2...

    struts2 拦截器写法

    Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现.

    struts2拦截器原理

    在这个例子中,`defaultStack`是Struts2默认提供的拦截器栈,包含了一些基础的拦截器,如`params`(处理请求参数)、`i18n`(国际化)等。`myCustomInterceptor`则是我们自定义的拦截器。 创建自定义拦截器有三种...

Global site tag (gtag.js) - Google Analytics