要想实现此功能,分以下两步:
1.配置web.xml:
<filter> <filter-name>LoginFilter</filter-name> <filter-class>com.yusj.core.filter.LoginFilter</filter-class> </filter> <filter-mapping> <filter-name>LoginFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
2.创建过滤器实现类,实现Filter接口:
package com.yusj.core.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; /** * * @ClassName: LoginFilter * @Description: 登录过滤器 * @author shaojian.yu * @date 2014年11月3日 下午1:19:28 * */ public class LoginFilter implements Filter { /** * * Title:doFilter * Description: 所有请求都走此过滤器来判断用户是否登录 * user: shaojian.yu * date: 2014 2014年11月3日 * @param servletRequest * @param servletResponse * @param filterChain * @throws IOException * @throws ServletException * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) */ @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { // 判断是否是http请求 if (!(servletRequest instanceof HttpServletRequest) || !(servletResponse instanceof HttpServletResponse)) { throw new ServletException( "OncePerRequestFilter just supports HTTP requests"); } // 获得在下面代码中要用的request,response,session对象 HttpServletRequest httpRequest = (HttpServletRequest) servletRequest; HttpServletResponse httpResponse = (HttpServletResponse) servletResponse; HttpSession session = httpRequest.getSession(true); String[] strs = { "loginpage", "login", "logout", "static" }; // 路径中包含这些字符串的,可以不用登录直接访问 StringBuffer url = httpRequest.getRequestURL(); /** * 过滤掉根目录 */ String path = httpRequest.getContextPath(); String protAndPath = httpRequest.getServerPort() == 80 ? "" : ":" + httpRequest.getServerPort(); String basePath = httpRequest.getScheme() + "://" + httpRequest.getServerName() + protAndPath + path + "/"; if (basePath.equalsIgnoreCase(url.toString())) { filterChain.doFilter(servletRequest, servletResponse); return; } // 特殊用途的路径可以直接访问 if (strs != null && strs.length > 0) { for (String str : strs) { if (url.indexOf(str) >= 0) { filterChain.doFilter(servletRequest, servletResponse); return; } } } // 从session中获取用户信息 String loginInfo = (String) session.getAttribute("username"); if (null != loginInfo && !"".equals(loginInfo)) { // 用户存在,可以访问此地址 filterChain.doFilter(servletRequest, servletResponse); } else { // 用户不存在,踢回登录页面 String returnUrl = httpRequest.getContextPath() + "/loginpage"; httpRequest.setCharacterEncoding("UTF-8"); httpResponse.setContentType("text/html; charset=UTF-8"); // 转码 httpResponse .getWriter() .println( "<script language=\"javascript\">alert(\"您还没有登录,请先登录!\");if(window.opener==null){window.top.location.href=\"" + returnUrl + "\";}else{window.opener.top.location.href=\"" + returnUrl + "\";window.close();}</script>"); return; } } @Override public void init(FilterConfig arg0) throws ServletException { } @Override public void destroy() { } }
工作中遇到,留备用。
相关推荐
通过过滤器,我们可以实现简单的登录验证,确保只有已登录用户才能访问特定资源。首先,我们需要在过滤器中检查请求是否需要用户身份,如果需要,则检查请求头中的认证信息(如Cookie或Token)。如果用户未登录,...
认证过滤器是Web应用程序中最常见的过滤器之一,主要用于身份验证过程。当用户尝试访问受保护的资源时,这些过滤器会检查用户的凭据,如用户名和密码,确保只有授权用户才能访问相应的资源。认证过滤器通常与Servlet...
Java Web开发中的过滤器(Filter)是Servlet技术的一部分,它在Web应用程序中扮演着至关重要的角色。过滤器允许开发者在请求被发送到目标资源(如Servlet、JSP页面)之前和响应被返回给客户端之后对请求和响应进行...
在Java Web开发中,"过滤器(Filter)"和"AJAX(Asynchronous JavaScript and XML)"是两个关键的技术概念,它们在构建高效、交互性强的Web应用中扮演着重要角色。下面将详细阐述这两个技术及其在实际应用中的结合。...
过滤器(Filter)在Java Web应用中用于在请求处理之前或之后执行特定任务,如登录检查、数据验证、GZIP压缩等。在用户验证和过滤场景中,过滤器常用来拦截请求,检查用户是否已经通过验证。如果没有,它会将用户...
本篇将详细探讨Java环境下如何实现一个SQL注入过滤器,并结合`web.xml`配置文件来部署和应用。 首先,我们需要了解SQL注入的基本原理。当用户输入的数据未经验证或转义就直接拼接到SQL查询语句中时,就可能发生SQL...
在Java Web开发中,过滤器(Filter)是Servlet规范的一部分,用于在请求被实际处理之前或之后进行预处理和后处理。在SSM框架中,我们可以自定义一个实现了javax.servlet.Filter接口的类,然后在web.xml或Spring的...
在Web开发中,验证用户是否登录的过滤器(Filter)是一种常见的安全机制,它用于确保只有已登录的用户才能访问特定的受保护资源。这里我们将深入探讨这个话题,结合提供的标题和描述,我们来详细解释如何创建和实现...
在Java Web开发中,用户登录是常见的功能,而Filter(过滤器)是Servlet技术中一个强大的工具,用于处理HTTP请求和响应。在这个场景下,我们将探讨如何使用Servlet和Filter实现用户登录的功能,以及这两个概念在实际...
【Java Filter过滤器在项目开发中的应用】 Java Filter(过滤器)是Java EE(现在称为Jakarta EE)规范的一部分,它允许开发者在请求被实际处理之前或之后进行拦截和处理。过滤器在Web应用程序中扮演着重要角色,...
在Web应用中,过滤器链常常被用来在请求到达目标Servlet之前执行某些操作,如身份验证、编码转换等。在本例中,过滤器可能会先检查IP地址,如果通过,则继续检查用户名,若两者都满足条件,请求才会被允许通过。 4....
过滤器则可以在请求进入应用之前检查请求路径,防止未经认证的用户访问受保护的资源。 **运行说明和可执行文件** 项目提供的`程序说明.docx`文档应该包含了如何部署和运行此示例的详细步骤,这对于开发者理解和学习...
在Java Web开发中,过滤器是Servlet规范的一部分,它允许开发者在请求到达目标资源(如Servlet、JSP等)之前和之后对请求和响应进行拦截处理。通过实现`javax.servlet.Filter`接口并配置在web.xml或使用注解,我们...
4. **过滤器(Filter)**:利用Filter来实现统一的权限控制、输入验证和输出编码,提高代码复用性和安全性。 5. **权限控制**:使用如Spring Security这样的框架进行细粒度的访问控制,确保只有授权用户才能访问...
过滤器在Java Web开发中扮演着重要角色,尤其是在处理请求和响应时进行预处理和后处理。在这个主题中,我们将主要关注Spring框架中的Filter机制,以及如何利用它来实现用户权限控制。 在Java Servlet规范中,Filter...
为了解决这一问题,我们可以利用Java的Filter机制来创建一个防止SQL注入的URL过滤器。下面将详细介绍这个过滤器的工作原理、配置方法以及如何有效地防止SQL注入。 首先,我们需要理解SQL注入的基本概念。SQL注入是...
本示例中的`URLfilter`类就是一个简单的过滤器,它的主要目的是防止SQL注入攻击,这是一种常见的恶意攻击手段,攻击者试图通过输入恶意SQL语句来获取未经授权的数据或者破坏数据库。 SQL注入攻击通常是由于应用程序...
- Filter是Java Web开发中的重要组件,它可以在请求进入实际处理之前进行预处理,比如验证请求头中的token。 - 创建一个实现了javax.servlet.Filter接口的类,重写doFilter方法,检查每个请求的header中是否包含...
综上所述,Java禁止直接URL访问图片涉及多个方面,包括Web服务器配置、Java Servlet、权限验证、过滤器、防盗链技术以及CDN的使用等,这些都需要开发者深入理解和灵活运用。通过这些手段,我们可以有效地保护网络...