过滤器和拦截器异同

简介:
  过滤器
package com.xy.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class IsLoginFilter implements Filter
{

    public void destroy()
    {

    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain
                     chain)throws IOException, ServletException
    {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) resp;
        HttpSession session = request.getSession();
        if (null == session.getAttribute("uinfo"))
        {
            request.setAttribute("msg", "您未登录或者离线时间过长,请重新登录");
            request.getRequestDispatcher("/ToLoginAction")
                                 .forward(request, response);
        }
        else
        {
            chain.doFilter(request, response);
        }
    }

    public void init(FilterConfig arg0) throws ServletException
    {

    }

}


login.jsp

<input type="hidden" value="${requestScope.msg}" id="msg" />
<script type="text/javascript">
var msg = document.getElementById("msg").value;
if ("" != msg) {
    alert(msg);
}
</script>
当然可以在js中直接获取${requestScope.msg}。


web.xml
<filter>
    <filter-name>login</filter-name>
        <filter-class>com.xy.filter.IsLoginFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>login</filter-name>
        <url-pattern>/logined/*</url-pattern>
    </filter-mapping>
</filter>






下面是拦截器

package com.xy.interceptor;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.xy.pojo.Manager;

public class AuthInterceptor extends AbstractInterceptor
{
    @Override
    public String intercept(ActionInvocation invocation) throws Exception
    {
        HttpSession session = ServletActionContext.getRequest().getSession();
        ServletActionContext.getRequest()
                       .setAttribute("loginMsg", "您未登录或者离线时间过长,请重新登录");
        Manager login = (Manager) session.getAttribute("manager");
        if (login != null) return invocation.invoke();
        else return "mustlogin";
    }
}



login.jsp

<script type="text/javascript">
$(function (){
        
var loginMsg ='<s:property value="#request.loginMsg" escape="false"/>';
if(""!=loginMsg)
{
    alert(loginMsg);
}
});
</script>

struts.xml

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

        <interceptors>
            <!-- 权限控制拦截器 -->
            <interceptor name="login"  class="com.xy.interceptor.AuthInterceptor"></interceptor>

            <!-- 定义一个包含权限控制的拦截器 -->
            <interceptor-stack name="mydefault">
                <interceptor-ref name="defaultStack"></interceptor-ref>
                <interceptor-ref name="login"></interceptor-ref>
            </interceptor-stack>
        </interceptors>

        <default-action-ref name="tomain"></default-action-ref>

        <!-- 定义全局处理结果 -->
        <global-results>
            <result name="mustlogin">/login.jsp</result>
        </global-results>

        <action name="tomain" class="com.xy.action.ToMainAction">
            <result name="success">/main.jsp</result>
        </action>

        <action name="toLogin" class="com.xy.action.ToLoginAction">
            <result>/login.jsp</result>
        </action>

        <action name="loginVerify" class="com.xy.action.LoginVerifyAction">
            <result name="success" type="chain">tomain</result>
            <result name="error">/login.jsp</result>
        </action>

        <action name="stu_*" class="com.xy.action.StudentAction"
            method="{1}">
            <interceptor-ref name="mydefault" />
            <result name="tomodify">/modify.jsp</result>
            <result name="toadd">/add.jsp</result>
            <result name="success" type="chain">tomain</result>
        </action>
</package>

目录
相关文章
|
人工智能
Adobe Bridge2023全新永久版电脑文件管理工具
Adobe Bridge是一款由adobe出品的全新型电脑文件管理工具,是Adobe Creative Suite 的控制中心,从 Bridge 中您可以查看、搜索、排序、管理和处理图像文件,可以使用 Bridge 来创建新文件夹、对文件进行重命名、移动和删除操作、编辑元数据、旋转图像以及运行批处理命令,也可以查看有关从数码相机导入的文件和数据的信息。Adobe Bridge软件功能全面,支持编辑管理图片、PDF文件等,帮助用户更好管理本地的文件。
2996 0
|
弹性计算 Shell 网络安全
因为 /usr/bin/dbus-daemon 共享库文件引发的系统启动异常
因为 /usr/bin/dbus-daemon 共享库文件引发的系统启动异常
|
7月前
|
关系型数据库 分布式数据库 数据安全/隐私保护
PolarDB 开源基础教程系列 5 高级特性体验
PolarDB 特性解读与体验涵盖多项关键技术,包括预读/预扩展、Shared Server(建议使用连接池)、闪回表和闪回日志、弹性跨机并行查询(ePQ)及TDE透明数据加密。预读/预扩展通过批量I/O操作显著提升Vacuum、SeqScan等场景性能;Shared Server优化高并发短连接处理;闪回功能可恢复表至指定时间点;ePQ支持跨机并行查询以提高复杂查询效率;TDE确保数据存储层的安全加密。
192 3
|
12月前
|
存储 监控 NoSQL
MongoDB的应用场景非常广泛
MongoDB的应用场景非常广泛
424 6
|
10月前
|
Java 测试技术 开发者
Spring Boot 的优点详解
Spring Boot 的优点详解
772 6
|
安全 网络安全 API
WSO2 products 文件上传(CVE-2022-29464)
WSO2 products 文件上传(CVE-2022-29464)
|
智能硬件
Wi-Fi 与蓝牙:差异解析
【8月更文挑战第24天】
2365 0
|
前端开发 JavaScript Java
千帆大模型平台多维度体验总结——平台使用以及接口调用小游戏开发
千帆大模型平台多维度体验总结——平台使用以及接口调用小游戏开发
552 0