Struts2拦截器 关于解决登录的问题

网友投稿 247 2023-03-27


Struts2拦截器 关于解决登录的问题

拦截器的工作原理如图 拦截器是由每一个action请求(request)都包装在一系列的拦截器的内部,通过redirectAction再一次发送请求。

拦截CzNBTD器可以在Action执行直线做相似的操作也可以在Action执行直后做回收操作。

我们可以让每一个Action既可以将操作转交给下面的拦截器,Action也可以直接退出操作返回客户既定的画面。

接下来我们该如何定义一个拦截器:

自定义一个拦截器如下:

1、实现Interceptor接口或者继承AbstractInterceptor抽象类。

2、创建一个Struts.xml文件进行定义拦截器。

3、在需要使用的Action中引用上述定义的拦截器,为了方便也可将拦截器定义为默认的拦截器(),

这样在不加特殊声明的情况下所有的Action都被这个拦截器拦截loginView,login。

①Interceptor接口声明三个方法:

public class LoginInterceptor implements Interceptor {

private Map session = null;

public void destroy() { }

public void init() { }

public String intercept(ActionInvocation actionInvocation) throws Exception {

8     Object myAction = actionInvocation.getAction();

if(myAction instanceof UserAction){

System.out.println("你访问的Action是UserAction,不要校验Session,否则死循环");

//放行

return actionInvocation.invoke();

}else{

System.out.println("你访问的Action是:"+myAction);

}

session = ActionContext.getContext().getSession();

Object user = session.get("user");

if (user!=null){

return actionInvocation.invoke();

}else{

return "login";

}

}

注:该方法可以不加:loginView,login

②让它继承 MethodFilterInterceptor:

public class LoginInterceptor extends MethodFilterInterceptor {

private Map session = null;

protected String doIntercept(ActionInvocation actionInvocation) throws Exception {

/*

Object myAction = actionInvocation.getAction();

if(myAction instanceof UserAction){

System.out.println("你访问的Action是UserAction,不要校验Session,否则死循环");

//放行

return actionInvocation.invoke();

}else{

System.out.println("你访问的Action是:"+myAction);

}

*/

session = ActionContext.getContext().getSession();

Object user = session.get("user");

if (user!=null){

return actionInvocation.invoke();

}else{

return "login";

}

}

}

③UserAction继承ActionSupport 实现 ModelDriven和SessionAware:

public class UserAction extends ActionSupport implements ModelDriven,SessionAware{

private Map session = null;

private User user = null;

   //驱动模型

public User getModel() {

this.user = new User();

return this.user;

}

public void setSession(Map map) {

this.session = map;

}

public String loginView(){

return "loginViewSuccess";

}

public String login(){

if ("admin".equals(user.getUserName())&&"123456".equals(user.getUserPassword())){

session.put("user",user);

return this.SUCCESS;

}else{

return this.ERROR;

}

}

}

Struts.xml文件中:

loginView,login

userAction_loginView

/WEB-INF/jsp/index.jsp

/WEB-INF/jsp/otherFunction.jsp

/WEB-INF/jsp/loginView.jsp

/WEB-INF/jsp/error.jsp

indexAction

login,loginView

其中,loginView,login 配置的过滤方法,意思是拦截器对其中的方法不起作用。在我这里,loginView是跳转到登录页面的方法。

login 是验证用户名和密码的方法,在其中会将通过验证的用户名放入session中。

总结:

1.在struts2 中,所有的拦截器都会继承 Interceptor 这个接口。

2.如果我们没有添加拦截器,struts2 会为我们添加默认拦截器。当然我们要是指定了拦截器,我们自己的拦截器就会取代默认的拦截器,

那么我们就不能享受默认拦截器提供的一些功能。所以,一般我会把默认拦截器也加上。

例如,在以上配置项中,action 里面再加上


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java.lang.Void 与 void的比较及使用方法介绍
下一篇:接口测试用例实际(接口测试 用例)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~