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

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

2014-07-18 11:21 435 查看
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: