struts2拦截器: struts2拦截器实现验证登陆

在我们使用servlet的时候,有一个叫过滤器的技术, 通过配置文件匹配,去拦截我们的每一个请求,过滤器就可以对该请求进行一定的操作,然后在放行到对应的请求,
struts2 由于本身是filter(过滤器)实现, 为了为我们struts2增加一个拦截请求的功能,就开发了一个拦截器,简单来说就是struts2里面的过滤器。

自定义拦截器:

package com.xingxue.filter;

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

public class LoginInterceptor implements Interceptor{

    public void destroy() {
        // TODO Auto-generated method stub

    }

    public void init() {
        // TODO Auto-generated method stub

    }

    public String intercept(ActionInvocation arg0) throws Exception {

        System.out.println("interceptor......");
        //放行
        return arg0.invoke();

    }

}

注册拦截器:

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

        <interceptors>
            <interceptor name="loginInterceptor" class="com.xingxue.filter.LoginInterceptor"></interceptor>
        </interceptors>
<package>       

为action添加拦截器:

<action name="adminLogin" class="com.xingxue.action.admin.AdminAction" method="adminLogin">
            <interceptor-ref name="loginInterceptor"></interceptor-ref>
            <interceptor-ref name="defaultStack"></interceptor-ref>
             <result name="OK" type="chain">findMenuByAdmin</result>
             <result name="NO">/view/user/login.jsp</result>
        </action>
        <action name="findMenuByAdmin" class="com.xingxue.action.admin.AdminAction" method="findMenuByAdmin">
             <result name="OK">/view/index.jsp</result>
            <result name="NO">/view/user/login.jsp</result>
            <interceptor-ref name="loginInterceptor"></interceptor-ref>
            <interceptor-ref name="defaultStack"></interceptor-ref>
        </action>

注意:action想要使用拦截器,必须独立配置,

同时记住 <interceptor-ref name="defaultStack"></interceptor-ref>
必须加上,拦截器默认会拦截住参数,加上此配置,就会对参数放行

但是上述写法会导致程序有大量的配置,这就增加了开发难度,所以实际使用时可以采用全局拦截器进行配置:

1、创建拦截登陆拦截器

package com.xingxue.filter;

import java.util.Map;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

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

public class LoginInterceptor implements Interceptor{

    public void destroy() {
        // TODO Auto-generated method stub

    }

    public void init() {
        // TODO Auto-generated method stub

    }

    public String intercept(ActionInvocation arg0) throws Exception {

        System.out.println("interceptor......");
        //放行

        String url = ""+ServletActionContext.getRequest().getRequestURL();

        //验证是否是登陆
        if(url.contains("adminLogin") || url.contains("userLogin")) {
            return arg0.invoke();
        }else {
            HttpSession session = ServletActionContext.getRequest().getSession();
            Map<String, Object> admin = (Map<String, Object>) session.getAttribute("userBean");
            if(admin == null) {
                return "login";
            }else {
                return arg0.invoke();
            }
        }
    }

}

2、配置全局拦截器:

<!--  拦截器包  -->
    <package name="interceptor" extends="struts-default">
        <!--  定义拦截器集合  -->
        <interceptors>
            <!--  注册自定义拦截  -->
            <interceptor name="login" class="com.xingxue.filter.LoginInterceptor"></interceptor>

            <!-- 注册拦截器栈 吧多个拦截器按照一定顺序组合在一起,叫一个名字 -->
            <interceptor-stack name="allInterceptor">
                <interceptor-ref name="login"></interceptor-ref>
                <interceptor-ref name="defaultStack"></interceptor-ref>
            </interceptor-stack>

        </interceptors>

        <!-- 注册拦截器到struts2 -->
        <default-interceptor-ref name="allInterceptor"></default-interceptor-ref>

        <!-- 定义返回结果 -->
        <global-results>
            <result name="login">/view/user/login.jsp</result>
        </global-results>

    </package>

拦截器栈: 拦截器就是将多个拦截器合并为一个

3、在需要使用拦截器的package继承自我们的全局拦截器:

<package name="admin" namespace="/admin" extends="interceptor" >
        <action name="adminLogin" class="com.xingxue.action.admin.AdminAction" method="adminLogin">
             <result name="OK" type="chain">findMenuByAdmin</result>
             <result name="NO">/view/user/login.jsp</result>
        </action>
        <action name="findMenuByAdmin" class="com.xingxue.action.admin.AdminAction" method="findMenuByAdmin">
             <result name="OK">/view/index.jsp</result>
            <result name="NO">/view/user/login.jsp</result>
        </action>
    </package>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值