多平台统一管理软件接口,如何实现多平台统一管理软件接口
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
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
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
public class UserAction extends ActionSupport implements ModelDriven
private Map
private User user = null;
//驱动模型
public User getModel() {
this.user = new User();
return this.user;
}
public void setSession(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
其中,loginView,login 配置的过滤方法,意思是拦截器对其中的方法不起作用。在我这里,loginView是跳转到登录页面的方法。
login 是验证用户名和密码的方法,在其中会将通过验证的用户名放入session中。
总结:
1.在struts2 中,所有的拦截器都会继承 Interceptor 这个接口。
2.如果我们没有添加拦截器,struts2 会为我们添加默认拦截器。当然我们要是指定了拦截器,我们自己的拦截器就会取代默认的拦截器,
那么我们就不能享受默认拦截器提供的一些功能。所以,一般我会把默认拦截器也加上。
例如,在以上配置项中,action 里面再加上
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~