文档章节

【邂逅Filter】使用filter&servlet实现简单的登录功能

杀丶破狼
 杀丶破狼
发布于 2017/01/03 22:00
字数 568
阅读 46
收藏 0

对框架了解的越多,越觉得对基础了解的不够,于是便有了这篇博客。

这是一个普通的web项目,使用maven来构建的(没有引入其他jar包)。

项目涉及的内容有web.xml,一个filter对请求进行过滤,一个servlet来处理逻辑,几个jsp页面。

web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
	<display-name>Archetype Created Web Application</display-name>

	<filter>
		<filter-name>loginFilter</filter-name>
		<filter-class>com.mummy.filter.LoginFilter</filter-class>
		<init-param>
			<param-name>loginFilterParam</param-name>
			<param-value>login.jsp;/servlet/LoginServlet;fail.jsp</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>loginFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<servlet>
		<servlet-name>loginServlet</servlet-name>
		<servlet-class>com.mummy.servlet.LoginServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>loginServlet</servlet-name>
		<url-pattern>/servlet/LoginServlet</url-pattern>
	</servlet-mapping>
	
	<filter>
		<filter-name>ErrorFilter</filter-name>
		<filter-class>com.mummy.filter.ErrorFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>ErrorFilter</filter-name>
		<url-pattern>/*</url-pattern>
		<dispatcher>ERROR</dispatcher>
	</filter-mapping> 
	
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	
	<error-page>
		<error-code>404</error-code>
		<location>/error404.jsp</location>
	</error-page>

</web-app>

 

filter

package com.mummy.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;

/**
 * 类说明
 *
 * @author 作者 mummy
 * @version 创建时间:2017年1月2日 下午3:49:25
 * 
 */

public class LoginFilter implements Filter
{
	private String[] noFilterReuqestArray;

	@Override
	public void destroy()
	{

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException
	{
		HttpServletRequest hRequest = (HttpServletRequest) request;
		HttpServletResponse hResponse = (HttpServletResponse) response;
		
		/*
		 * 过滤没有特定的URI
		 */
		if (containNoFilterReuqestArray(hRequest.getRequestURI()))
		{
			chain.doFilter(request, response);
			return;
		} 
		
		String sUserName = (String) hRequest.getSession().getAttribute("userName");
		if (sUserName == null)
		{
			// 未登陆
			hResponse.sendRedirect(hRequest.getContextPath() + "/login.jsp");
		}
		else
		{
			// 已登陆
			chain.doFilter(request, response);
		}
	}

	private boolean containNoFilterReuqestArray(String requestURI)
	{
		for (String param : noFilterReuqestArray)
		{
			if (param != null && param != "" && requestURI.indexOf(param) != -1)
			{
				return true;
			}
		}
		return false;
	}

	@Override
	public void init(FilterConfig config) throws ServletException
	{
		/*
		 * 获取filter中的初始化参数(在web.xml中配置)
		 */
		String loginFilterParam = config.getInitParameter("loginFilterParam");
		if (loginFilterParam != null)
		{
			noFilterReuqestArray = loginFilterParam.split(";");
		}
		else
		{
			noFilterReuqestArray = new String[]{};
		}
	}

}

 

servlet

package com.mummy.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * 类说明
 *
 * @author 作者 mummy
 * @version 创建时间:2017年1月2日 下午3:25:26
 * 
 */

@SuppressWarnings("serial")
public class LoginServlet extends HttpServlet
{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
			IOException
	{
		super.doGet(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException
	{
		String userName = req.getParameter("username");
		String password = req.getParameter("password");
		if (userName.equals("admin") && password.equals("123456"))
		{
			// 登录成功
			HttpSession session = req.getSession();
			session.setAttribute("userName", userName);
			resp.sendRedirect(req.getContextPath() + "/success.jsp");
		} else
		{
			// 登录失败
			resp.sendRedirect(req.getContextPath() + "/fail.jsp");
		}
	}

}

 

简陋的login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://" + request.getServerName() + ":"
			+ request.getServerPort() + path + "/";
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

	<form action="<%=basePath%>/servlet/LoginServlet" method="post">
		userName: <input type="text" name="username"><br> password: <input
			type="password" name="password"> <br> <input type="submit" value="submit">
	</form>
</body>
</html>

 

© 著作权归作者所有

上一篇: 菜鸟:Redis安装
下一篇: SpringMVC深度探险
杀丶破狼
粉丝 8
博文 63
码字总数 11552
作品 0
南京
程序员
私信 提问
springboot(十四):springboot整合shiro-登录认证和权限管理

这篇文章我们来学习如何使用Spring Boot集成Apache Shiro。安全应该是互联网公司的一道生命线,几乎任何的公司都会涉及到这方面的需求。在Java领域一般有Spring Security、Apache Shiro等安全...

ityouknow
2017/06/28
0
0
springboot(十四):springboot整合shiro-登录认证和权限管理

这篇文章我们来学习如何使用Spring Boot集成Apache Shiro。安全应该是互联网公司的一道生命线,几乎任何的公司都会涉及到这方面的需求。在Java领域一般有Spring Security、Apache Shiro等安全...

纯洁的虫纸
2017/06/28
0
0
转:springboot整合shiro-登录认证和权限管理

这篇文章我们来学习如何使用spring Boot集成Apache Shiro。安全应该是互联网公司的一道生命线,几乎任何的公司都会涉及到这方面的需求。在Java领域一般有Spring Security、Apache Shiro等安全...

芝麻绿豆
2017/07/25
896
0
共同父域下的单点登录

共同父域下的单点登录 址:http://blog.csdn.net/ghsau/article/details/20466351,转载请注明。 单点登录(Single Sign On),简称为SSO,SSO不仅在企业级开发很常用,在互联网中更是大行其道...

517270667
2017/06/29
0
0
结合SSM框架讲解Shiro案例--Shiro Demo

本教程结合SSM(SpringMVC + Mybatis)框架讲解Shiro(Shiro是 Java 的一个安全框架。我们经常看到它被拿来和 Spring 的 Security 来对比。),讲解的内容有自定义Shiro拦截器,Shiro Freem...

8446666
2016/06/29
29K
11

没有更多内容

加载失败,请刷新页面

加载更多

黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
6
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
9
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
5
0
Django的ChoiceField和MultipleChoiceField错误提示,选择一个有效的选项

在表单验证时提示错误:选择一个有效的选项 例如有这样一个表单: class ProductForm(Form): category = fields.MultipleChoiceField( widget=widgets.SelectMultiple(), ...

编程老陆
昨天
9
0
Vue核心概念及特性 (一)

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。 > 特点: 易用,灵活,高效,渐进式框架。 > 可以随意组合需要用到的模块 vue + components + vue-router + vuex + v...

前端优选
昨天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部