`

Java web过滤器验证登录(避免未经登录进入主页)

阅读更多

 

要想实现此功能,分以下两步:

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() {

	}

}

 

工作中遇到,留备用。

 

 

0
0
分享到:
评论
1 楼 chenzheng8975 2014-11-04  
不错

相关推荐

    JavaWeb中过滤器的三个小案例

    通过过滤器,我们可以实现简单的登录验证,确保只有已登录用户才能访问特定资源。首先,我们需要在过滤器中检查请求是否需要用户身份,如果需要,则检查请求头中的认证信息(如Cookie或Token)。如果用户未登录,...

    java一些 常用 的过滤 器

    认证过滤器是Web应用程序中最常见的过滤器之一,主要用于身份验证过程。当用户尝试访问受保护的资源时,这些过滤器会检查用户的凭据,如用户名和密码,确保只有授权用户才能访问相应的资源。认证过滤器通常与Servlet...

    过滤器在Java Web开发中的应用研究.zip

    Java Web开发中的过滤器(Filter)是Servlet技术的一部分,它在Web应用程序中扮演着至关重要的角色。过滤器允许开发者在请求被发送到目标资源(如Servlet、JSP页面)之前和响应被返回给客户端之后对请求和响应进行...

    过滤器和ajax

    在Java Web开发中,"过滤器(Filter)"和"AJAX(Asynchronous JavaScript and XML)"是两个关键的技术概念,它们在构建高效、交互性强的Web应用中扮演着重要角色。下面将详细阐述这两个技术及其在实际应用中的结合。...

    java用户验证和过滤

    过滤器(Filter)在Java Web应用中用于在请求处理之前或之后执行特定任务,如登录检查、数据验证、GZIP压缩等。在用户验证和过滤场景中,过滤器常用来拦截请求,检查用户是否已经通过验证。如果没有,它会将用户...

    SQL注入过滤 (Java版)

    本篇将详细探讨Java环境下如何实现一个SQL注入过滤器,并结合`web.xml`配置文件来部署和应用。 首先,我们需要了解SQL注入的基本原理。当用户输入的数据未经验证或转义就直接拼接到SQL查询语句中时,就可能发生SQL...

    ssm框架的登录过滤器

    在Java Web开发中,过滤器(Filter)是Servlet规范的一部分,用于在请求被实际处理之前或之后进行预处理和后处理。在SSM框架中,我们可以自定义一个实现了javax.servlet.Filter接口的类,然后在web.xml或Spring的...

    验证用户有没有登陆的过滤器

    在Web开发中,验证用户是否登录的过滤器(Filter)是一种常见的安全机制,它用于确保只有已登录的用户才能访问特定的受保护资源。这里我们将深入探讨这个话题,结合提供的标题和描述,我们来详细解释如何创建和实现...

    用户登陆,Filter(过滤器)

    在Java Web开发中,用户登录是常见的功能,而Filter(过滤器)是Servlet技术中一个强大的工具,用于处理HTTP请求和响应。在这个场景下,我们将探讨如何使用Servlet和Filter实现用户登录的功能,以及这两个概念在实际...

    Java filter过滤器在项目开发中的应用.doc

    【Java Filter过滤器在项目开发中的应用】 Java Filter(过滤器)是Java EE(现在称为Jakarta EE)规范的一部分,它允许开发者在请求被实际处理之前或之后进行拦截和处理。过滤器在Web应用程序中扮演着重要角色,...

    过滤器源代码

    在Web应用中,过滤器链常常被用来在请求到达目标Servlet之前执行某些操作,如身份验证、编码转换等。在本例中,过滤器可能会先检查IP地址,如果通过,则继续检查用户名,若两者都满足条件,请求才会被允许通过。 4....

    Struts2编写的通用(拦截器,过滤器)Filter

    过滤器则可以在请求进入应用之前检查请求路径,防止未经认证的用户访问受保护的资源。 **运行说明和可执行文件** 项目提供的`程序说明.docx`文档应该包含了如何部署和运行此示例的详细步骤,这对于开发者理解和学习...

    权限管理(过滤器粗粒度无侵入拦截方式)

    在Java Web开发中,过滤器是Servlet规范的一部分,它允许开发者在请求到达目标资源(如Servlet、JSP等)之前和之后对请求和响应进行拦截处理。通过实现`javax.servlet.Filter`接口并配置在web.xml或使用注解,我们...

    java安全之java-web1

    4. **过滤器(Filter)**:利用Filter来实现统一的权限控制、输入验证和输出编码,提高代码复用性和安全性。 5. **权限控制**:使用如Spring Security这样的框架进行细粒度的访问控制,确保只有授权用户才能访问...

    通过过滤器管理用户权限(2)

    过滤器在Java Web开发中扮演着重要角色,尤其是在处理请求和响应时进行预处理和后处理。在这个主题中,我们将主要关注Spring框架中的Filter机制,以及如何利用它来实现用户权限控制。 在Java Servlet规范中,Filter...

    防止sql注入的url过滤器【java filter】

    为了解决这一问题,我们可以利用Java的Filter机制来创建一个防止SQL注入的URL过滤器。下面将详细介绍这个过滤器的工作原理、配置方法以及如何有效地防止SQL注入。 首先,我们需要理解SQL注入的基本概念。SQL注入是...

    filter过滤器防止恶意注入

    本示例中的`URLfilter`类就是一个简单的过滤器,它的主要目的是防止SQL注入攻击,这是一种常见的恶意攻击手段,攻击者试图通过输入恶意SQL语句来获取未经授权的数据或者破坏数据库。 SQL注入攻击通常是由于应用程序...

    java后台获取小程序用户信息和生成自定义token,并使用filter过滤header的token源码

    - Filter是Java Web开发中的重要组件,它可以在请求进入实际处理之前进行预处理,比如验证请求头中的token。 - 创建一个实现了javax.servlet.Filter接口的类,重写doFilter方法,检查每个请求的header中是否包含...

    java禁止直接url访问图片

    综上所述,Java禁止直接URL访问图片涉及多个方面,包括Web服务器配置、Java Servlet、权限验证、过滤器、防盗链技术以及CDN的使用等,这些都需要开发者深入理解和灵活运用。通过这些手段,我们可以有效地保护网络...

Global site tag (gtag.js) - Google Analytics