Filter登录验证过滤器(全局)

通过Filter来定义一个登录验证过滤器,这是就不需要在每一个JSP页面添加判断用户合法性的代码了。

以下示例中包含了5个文件,一个是登录表单LoginForm.jsp,一个是登录判断页LoginConf.jsp,

一个是登录验证过滤器LoginFilter.java,一个是登录成功页面LoginSucess.jsp,一个是登录失败

页面Loginfailure.jsp。

LoginForm.jsp

 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
 2
 3 <html>
 4   <head><title>用户登录</title></head>
 5
 6   <body>
 7 <center>
 8 <form action="LoginConf.jsp" method="post">
 9 <table>
10 <tr>
11 <td colspan="2">用户登录</td>
12 </tr>
13 <tr>
14 <td>用户名:</td>
15 <td><input type="text" name="username"></td>
16 </tr>
17 <tr>
18 <td>密&nbsp;&nbsp;码</td>
19 <td><input type="password" name="userpassword"></td>
20 </tr>
21 <tr>
22 <td colspan="2">
23 <input type="submit" value="登录">
24 <input type="reset" value="重置">
25 </td>
26 </tr>
27 </table>
28 </form>
29 </center>
30   </body>
31 </html>

LoginConf.jsp

 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
 2
 3 <html>
 4   <head><title>登录判断</title></head>
 5
 6   <body>
 7 <center>
 8 <%
 9 //接受用户名,密码参数
10 String username=request.getParameter("username");
11 String userpassword = request.getParameter("userpassword");
12
13 //判断用户名以及密码,如果为指定用户则跳转到登陆成功页面。
14 if("CeShi".equals(username)&&"123456".equals(userpassword)){
15 session.setAttribute("username",username);
16 %>
17 <jsp:forward page="LoginSuccess.jsp"/>
18 <%
19 }
20 //如果不是指定用户,则跳转到登录失败页面
21 else{
22 %>
23 <jsp:forward page="LoginFailure.jsp" />
24 <%
25 }
26 %>
27 </center>
28   </body>
29 </html>

LoginFilter.java

 1 package com.mhb;
 2
 3 import java.io.IOException;
 4
 5 import javax.servlet.Filter;
 6 import javax.servlet.FilterChain;
 7 import javax.servlet.FilterConfig;
 8 import javax.servlet.ServletException;
 9 import javax.servlet.ServletRequest;
10 import javax.servlet.ServletResponse;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpSession;
13
14 public class LoginFilter implements Filter {
15
16 //初始化方法
17 public void init(FilterConfig arg0) throws ServletException {
18 System.out.println("登录验证过滤器初始化!");
19 }
20
21 //过滤方法
22 public void doFilter(ServletRequest req, ServletResponse res,
23 FilterChain chain) throws IOException, ServletException {
24 HttpServletRequest request = (HttpServletRequest)req;
25 //获得session对象
26 HttpSession session = request.getSession();
27 String login = (String) session.getAttribute("username");
28
29 //如果是登录判断页面,不用进行过滤检查
30 if("/JavaWeb/LoginConf.jsp".equals(request.getRequestURI())){
31 chain.doFilter(req, res);
32 }else{
33 //判断用户是否进行登录,如果进行了登录则继续操作,否则跳转到登录页面
34 if(login == null || "".equals(login)){
35 request.getRequestDispatcher("LoginForm.jsp").forward(req, res);
36 }else{
37 chain.doFilter(req, res);
38 }
39 }
40 }
41
42 //销毁方法
43 public void destroy() {
44 System.out.println("登录验证过滤器销毁!");
45 }
46 }

LoginSuccess.jsp

 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
 2
 3 <html>
 4   <head><title>登录成功</title></head>
 5
 6   <body>
 7       <center>
 8 <h1>登录成功</h1>
 9 ${sessionScope.username}欢迎您的登录!
10 </center>
11   </body>
12 </html>

LoginFailure.jsp

1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
2
3 <html>
4   <head><title>登录失败</title></head>
5
6   <body>
7     <h1>登录失败</h1>
8   </body>
9 </html>

web.xml配置

 1   <filter>
 2       <filter-name>LoginFilter</filter-name>
 3       <filter-class>com.mhb.LoginFilter</filter-class>
 4   </filter>
 5   <filter-mapping>
 6       <filter-name>LoginFilter</filter-name>
 7       <url-pattern>/*</url-pattern>
 8   </filter-mapping>
 9
10   <welcome-file-list>
11     <welcome-file>index.jsp</welcome-file>
12   </welcome-file-list>
13 </web-app>

验证过程:

  1)在浏览器中直接输入登录页面,输入正确用户名密码(CeShi,123456)跳转至成功页面。

2)在浏览器中直接输入登录页面,输入错误的用户名密码跳转至登录失败页面。

3)在浏览器中直接输入登录成功页面,直接跳转至登录页面(此步骤注意清空浏览器缓存)。

时间: 2024-08-03 08:09:23

Filter登录验证过滤器(全局)的相关文章

Java Web Filter登录验证

初做网站需要登录验证,转自 :http://blog.csdn.net/daguanjia11/article/details/48995789 Filter: Filter是服务器端的组件,用来过滤web请求.当发生一个web请求时,web容器会先检查请求的URL是否设置了Filter,如果设置了,则执行该Filter的doFilter方法.所有Filter都实现了javax.servlet.Filter接口,doFilter是定义在该接口中的最重要的方法. 最常见的使用过滤器的例子有:登录访

Yii登录验证和全局访问用户ID

注意:Yii默认的代码,Yii::app()->user->id返回的不是我们想要的用户ID,而是用户名.因此在useridentity类中要用一个变量来存储登录用户的ID,然后重载getID()方法,返回正确的用户ID. Yii 有一个内置的验证/授权(auth)框架,用起来很方便,还能对其进行自定义,使其符合特殊的需求. Yii auth 框架的核心是一个预定义的 用户(user)应用组件 它是一个实现了 IWebUser 接口的对象.此用户组件代表当前用户的持久性认证信息.我们可以通过Y

MVC Filter登录验证

Login Controller public ActionResult Index() { //return Content("hello index!"); return View(); } [HttpGet] public ActionResult Login() { return View(); } [HttpPost] public ActionResult Login(string username, string password) { if(username==&quo

[MVC学习笔记]5.使用Controller来代替Filter完成登录验证(Session校验)

      之前的学习中,在对Session校验完成登录验证时,通常使用Filter来处理,方法类似与前文的错误日志过滤,即新建Filter类继承ActionFilterAttribute类后重写OnActionExecuting方法,在RegisterGlobalFilters方法中注册新建的Filter类,之后直接在需要验证的Action前加上Filter标记即可. 1. 新建登陆校验类CheckLoginAttribute using System.Web.Mvc; namespace P

Filter实现登录验证拦截功能

既然是 Filter 实现的登录验证,首先自然是创建 Filter 实现类了,但是在创建 Filter 之前,我们先来看一个问题:怎么判断用户是否登录了? 看我们的登录代码: @RequestMapping("/login") public String login(LoginModel login, HttpServletRequest req, HttpServletResponse res, Model model) { HttpSession session = req.get

MVC过滤器进行统一登录验证

统一登录验证: 1.定义实体类Person:利用特性标签验证输入合法性设计登录页面 1 2 3 4 5 6 7 8 9 public class Person {     [DisplayName("用户名"), Required(ErrorMessage = "账户非空!")]     public string LoginName { get; set; }     [DisplayName("密 码"), Required(ErrorMes

过滤器实现登录验证及拒绝直接输url访问网页

package com.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.servlet

Shiro安全框架入门篇(登录验证实例详解与源码)

一.Shiro框架简单介绍 Apache Shiro是Java的一个安全框架,旨在简化身份验证和授权.Shiro在JavaSE和JavaEE项目中都可以使用.它主要用来处理身份认证,授权,企业会话管理和加密等.Shiro的具体功能点如下: (1)身份认证/登录,验证用户是不是拥有相应的身份: (2)授权,即权限验证,验证某个已认证的用户是否拥有某个权限:即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色.或者细粒度的验证某个用户对某个资源是否具有某个权限: (3)会话管理,即用户登录

MVC过滤器---身份验证过滤器

身份验证过滤器的用法(一) 1.首先创建一个自己定义的过滤类继承MVC身份验证过滤类,重写OnAuthorization方法 public class MyAuthorization:AuthorizeAttribute { public override void OnAuthorization(AuthorizationContext filterContext) { //如果保留如下代码,则会运行.net framework定义好的身份验证,如果希望自定义身份验证,则删除如下代码 //ba