struts2中自定义拦截器

来源:互联网 发布:php源码分享 编辑:程序博客网 时间:2024/06/04 17:46

今天struts实验课 要求struts自定义拦截器,使用户名不是以r结尾的用户不不得访问/sec命名空间下的Action

很简单 从jsp页面中获取输入的用户名,在拦截器中判断下即可。
拦截器的实现类
“`
package interceptor;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class CheckQuanxian extends AbstractInterceptor {

@Overridepublic String intercept(ActionInvocation invocation) throws Exception {

// ActionContext ctx =invocation.getInvocationContext();// 获得Action上下文
// Map session = ctx.getSession(); // 获取session
// String user = (String) session.get(“username”);
HttpServletRequest request = ServletActionContext.getRequest();
String user = request.getParameter(“username”);
if (user.endsWith(“r”)) {
return invocation.invoke();
}
((ActionSupport) invocation.getAction()).addActionMessage(“用户名不是以r结尾,无权访问”);
return “login”;
}

}

但在拦截器的实现类中获取uesrname时遇到了麻烦
用invocation.getInvocationContext().getSession().get(“username”); 获取不到username的值。原因是根本就没向session里面存username这个值
解决办法
可用ServletActionContext访问servlet API用getParameter()获取

配置文件

注意配置文件有一定的是顺序的
result-types
interceptors
default-interceptor-ref
default-action-ref
default-class-ref
global-results
global-exception-mappings
action*(就是所有的action放到最后)

0 0
原创粉丝点击