最近 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 过滤器,实现url过滤,权限模块经常用到的,很不错
本教程将详细介绍如何使用Spring MVC的拦截器来实现这一功能。 首先,了解拦截器(Interceptor)在Spring MVC中的角色。拦截器是Spring MVC提供的一种AOP(面向切面编程)特性,允许我们在请求处理之前、之后或者在...
`org.springframework.web-3.1.1.RELEASE.jar` 包含了Spring框架对Web应用的支持,如过滤器、异常处理和请求映射等。 `javassist-3.12.0.GA.jar` 是Java编程辅助工具,它在运行时可以动态修改类和创建新的类,常...
- **配置**:可以使用Java配置类或XML配置文件来定制Spring Security的行为,例如定义访问规则、配置安全过滤器链等。 - **无数据库登录**:在没有数据库的情况下,用户信息可能存储在内存中或者通过硬编码实现,...
#### 三、Spring MVC过滤器 除了上述配置外,Spring MVC还支持添加过滤器(Filter)。过滤器可以用来预处理请求或后处理响应,比如实现登录验证、编码转换等功能。可以通过在`web.xml`文件中配置`<filter>`和`...
其中,`WEB-INF/web.xml`是Web应用的部署描述符,定义了Servlet和过滤器等Web组件的配置。在Spring MVC中,这个文件通常会配置DispatcherServlet,它是Spring MVC的前端控制器,负责调度请求到相应的处理器。 `...
"Spring MVC内置编码过滤器详解" Spring MVC框架中,如何解决从页面传来的字符串的编码问题?答案是使用CharacterEncodingFilter过滤器,该过滤器是Spring MVC内部提供的,主要用于设置请求响应的字符编码。 ...
在处理HTTP请求时,Spring MVC 提供了参数绑定功能,将HTTP请求中的参数映射到控制器方法的参数上,使得开发更加便捷。然而,这个特性也可能导致安全问题,特别是参数绑定漏洞。 参数绑定漏洞通常出现在以下情况: ...
例如,设置 `authc` 过滤器用于处理未登录用户的访问,`perms` 过滤器用于权限控制。 - **整合 Spring MVC**:通过 `@Autowired` 注解将 SecurityManager 注入到 Spring 容器中,并在 Controller 中使用 Shiro 提供...
在Spring MVC框架中,过滤器(Filter)是一个关键组件,用于在请求被处理之前或之后执行特定的操作。本文将深入探讨如何实现一个登录过滤器,该过滤器旨在拦截需要登录才能访问的页面,并确保用户已登录才能继续操作...
3. **创建控制器**:编写一个处理请求的Spring MVC控制器,该控制器返回JSON数据,这些数据将被jqGrid用来填充表格。可以使用`@ResponseBody`注解和`@RequestMapping`来处理Ajax请求。 4. **编写HTML和JavaScript**...
- 编写过滤器链:定义一个自定义的Filter配置,包括Shiro的`FormAuthenticationFilter`、`AuthorizationFilter`等,配置在Web应用的过滤器链中。 - 集成Spring MVC:使用`@ShiroSubject`注解或`Subject`对象进行...
过滤器则是在 Servlet 容器层面处理请求和响应,如字符编码转换、安全过滤等。 ### 7. RESTful 风格 Spring MVC 支持 RESTful 风格的 URL 设计,可以通过 HTTP 动词(GET、POST、PUT、DELETE 等)和资源路径来区分...
Zuul或Spring Cloud Gateway则作为API网关,负责路由转发和过滤器处理,提供了统一的入口。 Mybatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动...
- Spring MVC的AOP在Web层的应用,如过滤器和拦截器的异同。 - 深入源码,例如DispatcherServlet的doDispatch方法,以及HandlerExecutionChain的处理流程。 这份资料可能涵盖以上各个方面,通过学习和理解,可以...
默认情况下,Spring MVC使用`HttpMessageConverter`来完成这个转换,其中最常用的转换器是`MappingJackson2HttpMessageConverter`,它依赖于Jackson库来序列化对象为JSON。 接下来,我们将探讨如何实现JSON数据的...
Spring MVC是Spring框架的一个模块,专注于处理Web应用的模型-视图-控制器(MVC)架构。它提供了一个灵活的框架,帮助开发者解耦应用程序的不同组件,使得测试和维护变得更加容易。在Spring MVC中,控制器接收HTTP...
这里,`initial-size`和`min-idle`定义了初始化时和最小连接数,`max-active`指定了最大连接数,`test-on-borrow`表示在获取连接时是否进行验证,`filter.stat`启用统计过滤器。 在Spring MVC中,我们还需要创建一...
Spring MVC是Spring框架的一部分,用于构建Web应用程序的模型-视图-控制器(Model-View-Controller)实现。Spring MVC通过分离业务逻辑、数据模型和视图界面来简化Web应用程序的开发。开发者可以使用注解或XML配置的...