`

Spring MVC 过滤器

 
阅读更多

最近 Spring—MVC 项目, 定义的过滤器类:

代码如下:

package com.cmcc.soc.aop;

import org.springframework.web.filter.OncePerRequestFilter; // 过滤器类 需要 实现的 每次请求都过滤的类

import javax.servlet.FilterChain; //请求的 处理链
import javax.servlet.ServletException; //servlet 的异常
import javax.servlet.http.HttpServletRequest; //http 的请求 
import javax.servlet.http.HttpServletResponse; //http 的响应
import java.io.IOException; //io 流异常
import java.io.PrintWriter; // 字符输出流

/**
 * Project: soc
 * User: Henry
 * Date: 13-7-26
 * Description:
 * Modify Memo:
 */
public class AuthenticationFilter extends OncePerRequestFilter {//继承一个 每次都过滤的过滤器类
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {

        // 不过滤的uri
        String[] notFilter = new String[] { "/Login/Login.do","/Home/Index.do"};// 设置不过滤的uri

        // 请求的uri
        String contextpath = request.getContextPath();  //获取上下文的路径
        String spring_uri = request.getRequestURI().replace(contextpath, "");  //获取 请求的  uri

        boolean doFilter = true;// 简写  doFiter 为true 时 会执行下面的

        for (String s : notFilter) { //遍历 不过滤的uri
            if (spring_uri.equals(s)) {  //取过 获取的uri  包含不过滤的 uri  doFiter 返回false
                // 如果uri中包含不过滤的uri,则不进行过滤
                doFilter = false;
                break; //退出 循环
            }
        }

        if (doFilter) {
            Object obj = request.getSession().getAttribute("user");//获取session 中的值
            if (null == obj) {  //如果session中的值是空的话  设置 响应
                // 如果session中不存在登录者实体,则弹出框提示重新登录
                // 设置request和response的字符集,防止乱码
                request.setCharacterEncoding("UTF-8");
                response.setCharacterEncoding("UTF-8");
                PrintWriter out = response.getWriter();// 字符输出流
                String loginPage = "/Login/Login.do";//登录页
                StringBuilder builder = new StringBuilder();

                //javascript
                builder.append("<script type=\"text/javascript\">");
                builder.append("alert('网页过期,请重新登录!');");
                builder.append("window.top.location.href='");// 地址转到
                builder.append(contextpath);//项目 路径
                builder.append(loginPage);//  登录页
                builder.append("';");
                builder.append("</script>");
                out.print(builder.toString()); //输出
            } else {
                // 如果session中存在登录者实体,则继续
                filterChain.doFilter(request, response);
            }
        } else {
            // 如果不执行过滤,则继续
            filterChain.doFilter(request, response);
        }
    }
}

分享到:
评论

相关推荐

    spring mvc过滤器实现

    spring mvc 过滤器,实现url过滤,权限模块经常用到的,很不错

    spring mvc拦截器过滤json中的null值

    本教程将详细介绍如何使用Spring MVC的拦截器来实现这一功能。 首先,了解拦截器(Interceptor)在Spring MVC中的角色。拦截器是Spring MVC提供的一种AOP(面向切面编程)特性,允许我们在请求处理之前、之后或者在...

    spring mvc框架依赖全面jar

    `org.springframework.web-3.1.1.RELEASE.jar` 包含了Spring框架对Web应用的支持,如过滤器、异常处理和请求映射等。 `javassist-3.12.0.GA.jar` 是Java编程辅助工具,它在运行时可以动态修改类和创建新的类,常...

    基本的spring mvc + spring security实现的登录(无数据库)

    - **配置**:可以使用Java配置类或XML配置文件来定制Spring Security的行为,例如定义访问规则、配置安全过滤器链等。 - **无数据库登录**:在没有数据库的情况下,用户信息可能存储在内存中或者通过硬编码实现,...

    spring mvc 框架

    #### 三、Spring MVC过滤器 除了上述配置外,Spring MVC还支持添加过滤器(Filter)。过滤器可以用来预处理请求或后处理响应,比如实现登录验证、编码转换等功能。可以通过在`web.xml`文件中配置`&lt;filter&gt;`和`...

    一个入门的spring mvc demo,基于eclipse maven

    其中,`WEB-INF/web.xml`是Web应用的部署描述符,定义了Servlet和过滤器等Web组件的配置。在Spring MVC中,这个文件通常会配置DispatcherServlet,它是Spring MVC的前端控制器,负责调度请求到相应的处理器。 `...

    通过原理解析Spring mvc的内置编码过滤器

    "Spring MVC内置编码过滤器详解" Spring MVC框架中,如何解决从页面传来的字符串的编码问题?答案是使用CharacterEncodingFilter过滤器,该过滤器是Spring MVC内部提供的,主要用于设置请求响应的字符编码。 ...

    spring mvc 参数绑定漏洞

    在处理HTTP请求时,Spring MVC 提供了参数绑定功能,将HTTP请求中的参数映射到控制器方法的参数上,使得开发更加便捷。然而,这个特性也可能导致安全问题,特别是参数绑定漏洞。 参数绑定漏洞通常出现在以下情况: ...

    spring mvc shiro的配置使用.zip_DEMO_spring mvc_spring mvc shiro

    例如,设置 `authc` 过滤器用于处理未登录用户的访问,`perms` 过滤器用于权限控制。 - **整合 Spring MVC**:通过 `@Autowired` 注解将 SecurityManager 注入到 Spring 容器中,并在 Controller 中使用 Shiro 提供...

    Spring MVC过滤器-登录过滤的代码实现

    在Spring MVC框架中,过滤器(Filter)是一个关键组件,用于在请求被处理之前或之后执行特定的操作。本文将深入探讨如何实现一个登录过滤器,该过滤器旨在拦截需要登录才能访问的页面,并确保用户已登录才能继续操作...

    jQuery Spring MVC

    3. **创建控制器**:编写一个处理请求的Spring MVC控制器,该控制器返回JSON数据,这些数据将被jqGrid用来填充表格。可以使用`@ResponseBody`注解和`@RequestMapping`来处理Ajax请求。 4. **编写HTML和JavaScript**...

    Spring MVC整合shiro

    - 编写过滤器链:定义一个自定义的Filter配置,包括Shiro的`FormAuthenticationFilter`、`AuthorizationFilter`等,配置在Web应用的过滤器链中。 - 集成Spring MVC:使用`@ShiroSubject`注解或`Subject`对象进行...

    Spring MVC 实例

    过滤器则是在 Servlet 容器层面处理请求和响应,如字符编码转换、安全过滤等。 ### 7. RESTful 风格 Spring MVC 支持 RESTful 风格的 URL 设计,可以通过 HTTP 动词(GET、POST、PUT、DELETE 等)和资源路径来区分...

    Spring Cloud+Spring MVC+Mybatis项目源码.rar_mvc_spring mvc项目_spring-

    Zuul或Spring Cloud Gateway则作为API网关,负责路由转发和过滤器处理,提供了统一的入口。 Mybatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动...

    【面试资料】-(机构内训资料)看透Spring MVC源代码分析与实践.zip

    - Spring MVC的AOP在Web层的应用,如过滤器和拦截器的异同。 - 深入源码,例如DispatcherServlet的doDispatch方法,以及HandlerExecutionChain的处理流程。 这份资料可能涵盖以上各个方面,通过学习和理解,可以...

    spring MVC 对 ResponseBody返回json数据进行脱敏处理

    默认情况下,Spring MVC使用`HttpMessageConverter`来完成这个转换,其中最常用的转换器是`MappingJackson2HttpMessageConverter`,它依赖于Jackson库来序列化对象为JSON。 接下来,我们将探讨如何实现JSON数据的...

    spring mvc、easyui、mybatis 开发网站后台管理系统源代码下载

    Spring MVC是Spring框架的一个模块,专注于处理Web应用的模型-视图-控制器(MVC)架构。它提供了一个灵活的框架,帮助开发者解耦应用程序的不同组件,使得测试和维护变得更加容易。在Spring MVC中,控制器接收HTTP...

    Spring MVC 配置 druid 数据源实例

    这里,`initial-size`和`min-idle`定义了初始化时和最小连接数,`max-active`指定了最大连接数,`test-on-borrow`表示在获取连接时是否进行验证,`filter.stat`启用统计过滤器。 在Spring MVC中,我们还需要创建一...

    spring MVC学习笔记

    Spring MVC是Spring框架的一部分,用于构建Web应用程序的模型-视图-控制器(Model-View-Controller)实现。Spring MVC通过分离业务逻辑、数据模型和视图界面来简化Web应用程序的开发。开发者可以使用注解或XML配置的...

Global site tag (gtag.js) - Google Analytics