struts2自定义拦截器做登陆模块

来源:互联网 发布:it教育网站 编辑:程序博客网 时间:2024/04/30 01:36
1.登陆action:LoginAction.java代码
package test.interceptor;


import java.util.Map;


import org.apache.struts2.interceptor.SessionAware;


import com.opensymphony.xwork2.ActionSupport;
//登陆action
//通过实现SessionAware接口获得session
public class LoginAction extends ActionSupport implements SessionAware{
private static final long serialVersionUID = 8621393046289083366L;
private String name;
//接受session中的map
private Map<String,Object> sessionMap;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

public String Login(){
if("tom".equals(name)){
//存放登陆信息,将name存储到session中
sessionMap.put("username", name);
}else{
//回到登陆页面
return LOGIN;

return "success";
}

public String toLoginView(){
return "loginView";
}

//注入session map
public void setSession(Map<String, Object> session) {
this.sessionMap = session;

}


}
2.自定义登陆拦截器LoginInterceptor.java代码


package test.interceptor;


import java.util.Map;


import test.action.RegAction;


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


//登陆拦截器
public class LoginInterceptor implements Interceptor {
private static final long serialVersionUID = -9160271954215546383L;


public void destroy() {
}


public void init() {

}


//看session中有无数据,若无则跳到登陆页面,若有则放行
public String intercept(ActionInvocation invocation) throws Exception {
//获得所到达的action对象
Object action = invocation.getAction();
//若来的action为登陆action或注册action都不管,直接放行
if(action instanceof LoginAction || action instanceof RegAction){
return invocation.invoke();
}
Map<String, Object> sessionMap = invocation.getInvocationContext().getSession();
//若无登陆,跳刀登陆页面
if(sessionMap.get("username" ) == null){
return "login";
}else{
//放行操作即失去控制权,将控制权交给重新交还给中间人invocation
return invocation.invoke();
}
}
}


3.配置文件login.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
<package name="LoginPkg" namespace="/login" extends="struts-default">

<!-- 自定义的拦截器需要注册(注册后才能用),首先要注册 -->
<interceptors>
<interceptor name="loginInterceptor" class="test.interceptor.LoginInterceptor"/>

<!-- 自定义拦截栈 -->
<interceptor-stack name="loginStack">
<!-- 在自定义拦截栈中配置自己的拦截器,再把默认栈重用过来 -->
<interceptor-ref name="loginInterceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<!-- 定义默认栈,将登陆栈定义为默认栈 -->
<default-interceptor-ref name="loginStack"/>

<!-- 定义全局结果,在action中定义的结果为局部结果,且局部结果优先级更高 -->
<global-results>
<result name="login">/login/login.jsp</result>

</global-results>
<!-- 登陆action -->
<action name="LoginAction_*" class="test.interceptor.LoginAction" method="{1}">
<result name="success">/login/success.jsp</result>
<result name="loginView">/login/login.jsp</result>

</action>


</package>
</struts>




4.登陆界面login.jsp
<s:form namespace="/login" action="LoginAction_Login" method="post" >
  <s:textfield name="name" label="UserName" />
  <s:submit />
 </s:form>
0 0
原创粉丝点击