Struts2框架的struts.xml文件的登录拦截器的配置和使用

struts.xml 的文件程序:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
    <constant name="struts.enable.SlashesInActionNames" value="true"/><!--将斜杠‘/’允许作为通配符使用-->
    <constant name="struts.enable.DynamicMethodInvocation" value="true"/><!--允许action动态调用方法-->
    <package name="finebi" namespace="/" extends="struts-default">
        <interceptors>
            <!--登录验证拦截器-->
            <interceptor name="loginInvocation" class="cominvocation.LoginInvocation"/>
            <interceptor-stack name="myStack"><!--自定义拦截器栈-->
                <interceptor-ref name="defaultStack"/><!--必须使用默认拦截器栈,否则无法调用参数-->
                <interceptor-ref name="loginInvocation"/><!--调用登录验证拦截器-->
            </interceptor-stack>
        </interceptors>
        <default-interceptor-ref name="myStack"/><!--重新调用默认拦截器栈-->
        <global-results>
            <result name="login">index.jsp</result><!--公共默认结果集,该包中所有action有返回结果是login都可以在此返回页面显示-->
        </global-results>
        <global-allowed-methods>regex:.*</global-allowed-methods><!--允许使用*表示动态通配符-->

        <action name="loginAction" class="com.action.LoginAction">
            <interceptor-ref name="defaultStack"/><!--登录Action不能使用登录验证拦截器,必须使用默认拦截器,否则便永远无法登录-->
            <result>/AllListView.jsp</result>
        </action>

        <action name="HRAction/*" class="com.action.HRAction" method="{1}">
            <result name="HR_list">/HR/hr_overtimelist.jsp</result>
            <result name="HR_updateview">/HR/HR_updateview.jsp</result>
            <result name="HR_intoInsertView">/HR/HR_insertview.jsp</result>
        </action>

    </package>
</struts>

总结
简单的登录拦截器的使用,
首先,使用登录拦截器时要先定义名称,并获取其完整的类名:

 <interceptor name="loginInvocation" class="cominvocation.LoginInvocation"/>

接着创建一个自己的拦截器栈

  <interceptor-stack name="myStack"><!--自定义拦截器栈-->
		<interceptor-ref name="defaultStack"/><!--必须使用默认拦截器栈,否则无法调用参数-->
        <interceptor-ref name="loginInvocation"/><!--调用登录验证拦截器-->
  </interceptor-stack>

注意点:一定要在自定义的拦截器栈中的第一行就加上系统默认的拦截器栈,否则无法传递参数。
之后再调用自己的编写的拦截器。
另外如果自己编写了多个拦截器时,在定义拦截器名称和调用拦截器时应满足先定义后调用的顺序;比如
定义的拦截器有 invocation1,invocation2,invocation3
而在调用时 必须是 invocation3,invocation2,invocation1

创建的拦截器和拦截器栈必须在 “interceptors” 标签中。

创建完自己的拦截器和拦截器栈后,必须要设置重新调用自己的拦截器栈,
即使用如下程序:

    <!--重新调用默认拦截器栈-->
<default-interceptor-ref name="myStack"/>

它必须在“interceptors” 标签的后面。

依据上述方法创造的拦截器,最大的好处就是,以下所有的Action中,都无需再写调用拦截器的程序,系统自动默认调用拦截器栈。
另外由于登录页面是不能使用这个登录拦截器栈的。否则就永远处于登录界面,无法跳转了。所以在登录的Action中不能使用自己写的拦截器栈,想要做到这一点,只需要在登录的Action中调用系统的拦截器栈即可。

在登录Action中使用登录验证分方法是:

public String execute()
    {
      if (username.equals("zhangsan")&&password.equals("111"))//验证用户名是否有合法的登录信息
        {
            ActionContext.getContext().getSession().put("username",username);//登录验证令牌
            return SUCCESS;
        }
        return "login";//不是合法用户就返回登录页面
    }

制作一个登陆令牌用于登录拦截器中验证是否登陆。

登录拦截器中的代码:

 @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        ActionContext actionContext=invocation.getInvocationContext();
        if(null==actionContext.getSession().get("username")||
                "".equals(actionContext.getSession().get("username"))||
                "null".equals(actionContext.getSession().get("username")))
        {
            return "login";//使用拦截器,发现没有登录则返回登录界面,
        }
        return invocation.invoke();//如果登录了就传到下一个拦截器或回到Action中
    }

这样一个登陆拦截器就可以使用了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值