理解Struts2拦截器
1. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现.
2. 拦截器栈(Interceptor Stack)。Struts2拦截器栈就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,Struts2拦截器链中的拦截器就会按其之前定义的顺序被调用。
具体实现
<interceptors>
<interceptor name="permission" class="com. UserInterceptor "/>
<interceptor-stack name="permissionStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="permission" />
</interceptor-stack>
</interceptors>
<action name="list_*" class="com. UserAction" method="{1}">
<interceptor-ref name="permissionStack" />
</action>
userIntercepter中
public class UserInterceptor implements Interceptor{
public void destroy() {
}
public void init() {
}
public String intercept(ActionInvocation method) throws Exception {
HttpSession session = ServletActionContext.getRequest().getSession();
String user = (String) session.getAttribute("userCode");
if(user == null){
return "failure"; //拦截请求,转向输出一个result页面
}else {
method.invoke(); //允许进入方法
}
return null;
}
}
过滤器
在web.xml中配置
<filter>
<filter-name>RightFilter</filter-name>
<filter-class>com.kairgus.action.userFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>RightFilter</filter-name>
<url-pattern>/e_admin/*</url-pattern>
<filter-mapping>
在com.kairgus.action.userFilter中
public class userFilter extends HttpServlet implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse response1 = (HttpServletResponse) response;
HttpServletRequest request1=(HttpServletRequest) request;
String usercode =(String) ServletActionContext.getRequest().getSession().getAttribute("userCode");
if (usercode==null) {
response1.sendRedirect(request1.getSession().getServletContext().getContextPath()+"/login.jsp");
}
else {
chain.doFilter(request1, response1);
}
}
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
}