struts2拦截器

本文的拦截器部分是好的,但是session部分不对,这里有两个对的:

http://blog.csdn.net/weiyanghuadi/article/details/8931820

http://blog.csdn.net/weiyanghuadi/article/details/9050245

本文把拦截器和sessionAware写在一起了,本来觉得DummyAction类简单,让它实现了一个sessionAware借口,想看看struts2中的session,
无奈太简单了,以至于框架总是无法生成session对象。框架不给注入,我只好自己new一个Map,当然不起作用!

如果没有客户端请求,这里指提交表单,表单中的文本域要对应action中的属性,那么struts2控制器就不会产生Map对象.我按这个思路改,还是空空空!I am really breaking my head to get session object in my action class。When I get the session map using sessionaware interface, I get an empty map.

我是想:通过actionInvocation.getInvocationContext().getSession();获得struts2的session

package org.arpit.javapostsForLearning;

import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.*;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;

public class DummyAction extends ActionSupport implements SessionAware {
	
	private Map session2;
	private String justForHavingMapObject;

    public String execute()
    {
        System.out.println("   In Action");
        System.out.println(getJustForHavingMapObject());
        //如果下面直接用session.put,则有null exception
        //setSession(Map session);
        //this.session.put("kankan","liusir");
        NiMaNull();
        return SUCCESS;
    }
    
    //public Map getSession(){
    	//session=actionInvocation.getInvocationContext().getSession();
    	//return session;
   // }
    
    public void NiMaNull(){
    	//session.get("kanak");
    	//session.put("kankan","liusir");
    	System.out.println(getJustForHavingMapObject());
    	session2=new HashMap();
    	session2.put("kankan","liusir");
    }
    
    public void setSession(Map session3) {
		this.session2 = session3;
		//System.out.println(this.session.get("JSESSIONID"));
		System.out.println("who use setSession");
		
	}

	public String getJustForHavingMapObject() {
		return justForHavingMapObject;
	}

	public void setJustForHavingMapObject(String justForHavingMapObject) {
		System.out.println("inside setJustFor");
		this.justForHavingMapObject = justForHavingMapObject;
	}
}

package org.arpit.javapostsForLearning;

import java.util.Map;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class FirstInterceptor implements Interceptor {

	@Override
	public void destroy() {

	}

	@Override
	public void init() {

	}

	@Override
	public String intercept(ActionInvocation actionInvocation) throws Exception {

		String startInterceptor = "   Start Interceptor 1";
		System.out.println(startInterceptor);
		/*
		 * Map session = actionInvocation.getInvocationContext().getSession();
		 * String temp=(String)session.get("kankan"); System.out.println(temp);
		 */
		String result = actionInvocation.invoke();
		Map session = actionInvocation.getInvocationContext().getSession();
		if (session == null) {
			System.out.println("no fucking session");
		} else {
			System.out.println("yes session");
		}
		String temp = (String) session.get("kankan");
		System.out.println(temp);
		String endInterceptor = "   End Interceptor 1";
		System.out.println(endInterceptor);
		return result;
	}

}

<body>
	<s:form action="Dummy">
		<s:textfield name="justForHavingMapObject"
			label="justForHavingMapObject" />
		<s:submit value="For calling Dummy Action" align="center" />
	</s:form>
</body>

<package name="default" extends="struts-default" namespace="/">
        <interceptors>
            <interceptor name="firstInterceptor"
                class="org.arpit.javapostsForLearning.FirstInterceptor" />
            <interceptor name="secondInterceptor"
                class="org.arpit.javapostsForLearning.SecondInterceptor" />

        </interceptors>
                
        <action name="Dummy" class="org.arpit.javapostsForLearning.DummyAction">
        <interceptor-ref name="firstInterceptor"/>
        <interceptor-ref name="secondInterceptor"/>
            <result name="success">Welcome.jsp</result>
            <result name="input">login.jsp</result>
        </action>
    </package>

原文:http://javapostsforlearning.blogspot.com/2012/07/struts-2-interceptors-with-example.html

源代码:http://pan.baidu.com/share/link?shareid=3673532014&uk=3878681452

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Struts2 中,可以使用拦截来实现权限控制。具体来说,可以编写一个自定义的拦截,然后在 struts.xml 配置文件中将其配置为需要进行权限控制的 Action 的拦截。以下是一个简单的权限拦截示例: ```java public class AuthInterceptor extends AbstractInterceptor { @Override public String intercept(ActionInvocation invocation) throws Exception { // 获取当前用户 User user = (User) ActionContext.getContext().getSession().get("user"); // 判断用户是否拥有权限 if (user != null && user.hasPermission(invocation.getInvocationContext().getName())) { // 如果有权限,则继续执行 Action return invocation.invoke(); } else { // 如果没有权限,则跳转到错误页面 return "error"; } } } ``` 在上述代码中,我们首先获取了当前用户,然后判断用户是否拥有执行当前 Action 的权限。如果有权限,则继续执行 Action;否则,跳转到错误页面。 接下来,在 struts.xml 配置文件中,我们可以将该拦截配置为需要进行权限控制的 Action 的拦截,如下所示: ```xml <action name="myAction" class="com.example.MyAction"> <interceptor-ref name="authInterceptor"/> <result name="success">/myAction.jsp</result> <result name="error">/error.jsp</result> </action> <interceptor-stack name="authStack"> <interceptor-ref name="authInterceptor"/> <interceptor-ref name="defaultStack"/> </interceptor-stack> <interceptors> <interceptor name="authInterceptor" class="com.example.AuthInterceptor"/> </interceptors> ``` 在上述代码中,我们首先定义了一个名为 authStack 的拦截栈,该拦截栈包含了 authInterceptor 和 defaultStack 两个拦截。然后,我们将 myAction Action 配置为使用 authStack 拦截栈。最后,我们定义了一个名为 authInterceptor 的拦截,并将其添加到了 interceptors 中。 这样一来,当用户访问 myAction Action 时,就会先执行 authInterceptor 拦截,进行权限控制,然后再执行 defaultStack 拦截栈中的其它拦截。如果 authInterceptor 拦截返回了 error,则会跳转到 error.jsp 页面;否则,会跳转到 myAction.jsp 页面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值