您的位置:首页 > 编程语言 > Java开发

学习struts2建bbs总结三:登录拦截器

2012-08-13 19:05 483 查看
前面实现了登录action,在以后发帖的过程中,必须要审核用户是否登录,如果登录了才能正常发帖,不然就返回注册界面。

这不,用上了拦截器。需要实现拦截器接口Interceptor 。

public interface Interceptor extends Serializable {
void destroy();
void init();
String intercept(ActionInvocation invocation) throws Exception;
}


init和destroy方法会在程序开始和结束时各执行一遍,不管使用了该拦截器与否,只要在struts.xml中声明了该Struts2拦截器就会被执行。

intercept方法就是拦截的主体了,每次拦截器生效时都会执行其中的逻辑。

自定义拦截器LoginInterceptor:

import java.util.Map;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class LoginInterceptor implements Interceptor {

@Override
public void destroy() {
// TODO Auto-generated method stub

}

@Override
public void init() {
// TODO Auto-generated method stub

}

@Override
public String intercept(ActionInvocation arg0) throws Exception {
Map map= arg0.getInvocationContext().getSession();
if (map.get("USER_NAME")!=null) {
return arg0.invoke();
}else{
return "noLogin";
}

}

}


然后在struts.xml中注册:

<interceptors>
<!--判断是否登录-->
<interceptor name="login" class="pengbbs.controller.LoginInterceptor" />
<interceptor-stack name="myStack">
<interceptor-ref name="login"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors><default-interceptor-ref name="myStack"></default-interceptor-ref>
在这里定义拦截器栈,以供调用。其中还有别的拦截器,下文说明。还需要引用默认defaultStack。并把myStack定义为默认拦截器。

这样一个简单的拦截器就ok了。

同上文中实现登录登出操作,系统实现了postaction,即发帖操作。但发帖必须先登录,所以在这里要引入上面的登录拦截器。如下:

<action name="post" class="postAction">
<result name="success">/post_view.jsp</result>
<result name="invalid.token">/error.jsp</result>
<result name="notPost">/error.jsp</result>
<interceptor-ref name="myStack"></interceptor-ref>
<interceptor-ref name="token"></interceptor-ref>
<result name="noLogin" type="redirect">/login.jsp</result>
</action>

上面的postAction需要在spring的xml中注册。

<bean id="postAction" class="pengbbs.controller.PostAction"
abstract="false" lazy-init="default" autowire="default"
p:userService-ref="userService">
</bean>


这样就实现了发帖的登录拦截操作。如果没有登录,即转到登录页面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: