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

Struts2自定义拦截器实例—只允许从登录页面进入系统

2014-04-01 22:23 519 查看
【1】struts.xml:

<!-- 定义一个拦截器 -->
<interceptors>
<interceptor name="authority"

class="org.interceptot.LoginInterceptor">

</interceptor>

<!-- 拦截器栈 -->

<interceptor-stack name="mydefault">

<interceptor-ref name="defaultStack" />

<interceptor-ref name="authority" />

</interceptor-stack>

</interceptors>

<!-- 定义全局Result -->

<global-results>
<!-- 当返回login视图名时,转入/login.jsp页面 -->

<result name="login">/login.jsp</result>

</global-results>

<action name="show" class="org.action.showAction">

<result name="success">/main.jsp</result>

<!-- 使用此拦截器 -->

<interceptor-ref name="mydefault" />

</action>

<!--验证登录用户信息 -->
<action name="login" class="org.action.loginAction" method="execute">

<result name="error">/login.jsp</result>

<result name="input">/login.jsp</result>

</action>

【2】自定义拦截器org.interceptot.LoginInterceptor:

package org.interceptot;
import java.util.Map;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionInvocation;

import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class LoginInterceptor extends AbstractInterceptor {

@Override
public String intercept(ActionInvocation invocation) throws Exception {

// 取得请求相关的ActionContext实例

ActionContext ctx = invocation.getInvocationContext();

Map session = ctx.getSession();

String user = (String) session.get("username");

// 如果没有登陆,即用户名不存在,都返回重新登陆

System.out.println("user:"+user);

if (user != null) {
System.out.println("test");

return invocation.invoke();

}
System.out.println("你还没有登录");

ctx.put("tip", "你还没有登录");

return Action.LOGIN; //返回一个叫login的result结果

}

}
【3】进入主页面的Action:org.action.showAction

package org.action;

import com.opensymphony.xwork2.ActionSupport;

public class showAction extends ActionSupport {

public String execute() {
return "success";
}
}

【4】LoginAction:

private boolean isInvalid(String value) {
return (value == null || value.length() == 0);

}
if (isInvalid(user.getUsername()))
return INPUT;
if (isInvalid(user.getPassword()))

return INPUT;
//登录成功将User放入session中
HttpServletRequest request = ServletActionContext.getRequest();

Map map=ActionContext.getContext().getSession();

map.put("username", user.getUsername());

【5】如果我们通过show.action访问main.jsp那么就会被自定义拦截器拦住,拦截器检查session中

是否有值,有证明用户已经登录,没有则为没有登录,那么就会被跳转到登陆页面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: