JavaWeb -- Struts 自定义拦截器, 登录权限拦截

1. 自定义拦截器, 登录权限拦截

login.jsp 登录JSP

<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<title>login.jsp</title>
	</head>
	<body>
		<s:form action="LoginAction_reg" name="login">
			<s:textfield name="name" label="UserName" />
			<s:submit />
		</s:form>
	</body>
</html>

LoginAction.java 登录处理action

/**
 * 登录action
 */
public class LoginAction extends ActionSupport implements SessionAware{
	private static final long serialVersionUID = -6933309304624396640L;

	public String name;

	/* 接受session中的map */
	private Map<String, Object> sessionMap;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String reg() {
		if("tom".equals(name)){
			//存放登录信息
			sessionMap.put("username", name);
		}
		else{
			//回到登录页面
			return LOGIN ;
		}
		return "success";
	}

	public String toLoginView() {
		System.out.println("toRegView");
		return "loginView";
	}

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

LoginInterceptor.java 拦截器

也可以继承MethodFilterInterceptor, 可以指定拦截器拦截Action的哪些方法

例如:

<interceptors>
    <interceptor name="myInterceptor" class="com.kevin.web.MyInterceptor">
    <param name="includeMethods">toTest1</param>
    </interceptor>
    </interceptors>

自定义拦截器中获取request。response。 

HttpServletRequest request = (HttpServletRequest) invocation.getInvocationContext().get(ServletActionContext.HTTP_REQUEST);


/**
 * 登录拦截器
 */
public class LoginInterceptor implements Interceptor {
	private static final long serialVersionUID = 286019271181543787L;

	public void destroy() {
	}

	public void init() {
	}

	public String intercept(ActionInvocation invocation) throws Exception {
		Object action = invocation.getAction();
		//如果是达到登录或者注册的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{
			return invocation.invoke();
		}
	}
}

login.xml ,action interceptor 注册配置, 需要加到struts.xml (include)

<?xml version="1.0"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    "http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
    <package name="LoginPkg" namespace="/login" extends="struts-default">
        <interceptors>
            <!-- 注册拦截器 -->
            <interceptor name="loginInterceptor" class="cn.itcast.struts2.interceptor.LoginInterceptor" />
            
            <!-- 自定义拦截器栈 -->
            <interceptor-stack name="loginStack"><span style="white-space:pre">		</span><pre code_snippet_id="152132" snippet_file_name="blog_20140111_4_1671238" class="java" name="code"><span style="white-space:pre">		</span><interceptor-ref name="defaultStack" />
<interceptor-ref name="loginInterceptor" /> </interceptor-stack> </interceptors> <!-- 定义默认栈 --> <default-interceptor-ref name="loginStack" /> <!-- 定义全局结果 --> <global-results> <result name="login">/login.jsp</result> </global-results> <!-- 注册登录action --> <action name="LoginAction_*" class="cn.itcast.struts2.interceptor.LoginAction" method="{1}"> <result name="success">/success.jsp</result> <result name="loginView">/login.jsp</result> </action> </package></struts>
 


 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值