文档章节

过滤器控制用户登录

Bob2100
 Bob2100
发布于 2016/12/10 17:34
字数 273
阅读 29
收藏 0
点赞 0
评论 10

1、创建一个过滤器

package cn.demo.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 cn.demo.domain.User;

public class UserLimitFilter implements Filter {

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		System.out.println("UserLimitFilter 创建了...");
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		System.out.println("UserLimitFilter doFilter 执行了...");
		HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse res = (HttpServletResponse) response;
		String path = req.getRequestURI().substring(req.getContextPath().length());
		// 放行的页面,不需要拦截
                if ("/login.jsp".equals(path) || "/checkImgServlet".equals(path) || "/loginServlet".equals(path)
				|| "/".equals(path) || "/register.jsp".equals(path) || "/registerServlet".equals(path)) {
			// 访问登录页面直接放行
			chain.doFilter(req, res);
			System.out.println("UserLimitFilter doFilter 执行完毕...");
			return;
		} else {
			// 其他页面,需要限制权限,需要用户登录
			// 判断用户是否登录
			User existUser = (User) req.getSession().getAttribute("existUser");// 登录成功,把User对象存到session中
			if (existUser != null) {
				// 已经登录,放行
				chain.doFilter(req, res);
				System.out.println("UserLimitFilter doFilter 执行完毕...");
				return;
			} else {
				// 去登录
				res.sendRedirect(req.getContextPath() + "/login.jsp");
				System.out.println("UserLimitFilter doFilter 执行完毕...");
				return;
			}
		}
	}

	@Override
	public void destroy() {
		System.out.println("UserLimitFilter 销毁了...");
	}

}

2、web.xml注册过滤器

  <filter>
	<filter-name>UserLimitFilter</filter-name>
	<filter-class>cn.demo.filter.UserLimitFilter</filter-class>
  </filter>
  
  <filter-mapping>
  	<filter-name>UserLimitFilter</filter-name>
  	<url-pattern>/*</url-pattern> <!-- 拦截模式,所有页面都走过滤器 -->
  </filter-mapping>

© 著作权归作者所有

共有 人打赏支持
Bob2100
粉丝 5
博文 50
码字总数 10399
作品 0
浦东
高级程序员
加载中

评论(10)

逆天邪龙

引用来自“逆天邪龙”的评论

User existUser = (User) req.getSession().getAttribute("existUser")这其中"existUser"从哪来得。

引用来自“Bob1900”的评论

登录的时候会把user对象绑定的session,session.setAttrbute("existUser", user);

引用来自“逆天邪龙”的评论

我好想还是不对,我发input中type="text" name="uname"
然后<%
      String uname = request.getParameter("uname");
      String upass = request.getParameter("upass");
      User user = new User();
      user.setUname(uname);
      user.setUpass(upass);
      session.setAttribute("user",user);
    %>
debug发现uname和upass 值为NULL,我到底怎样才能取不为NULL啊,郁闷死我了,还以为好了。

引用来自“Bob1900”的评论

私信我,把代码发我邮箱吧,我看看
问题解决了:smiley:
Bob2100
Bob2100

引用来自“逆天邪龙”的评论

User existUser = (User) req.getSession().getAttribute("existUser")这其中"existUser"从哪来得。

引用来自“Bob1900”的评论

登录的时候会把user对象绑定的session,session.setAttrbute("existUser", user);

引用来自“逆天邪龙”的评论

我好想还是不对,我发input中type="text" name="uname"
然后<%
      String uname = request.getParameter("uname");
      String upass = request.getParameter("upass");
      User user = new User();
      user.setUname(uname);
      user.setUpass(upass);
      session.setAttribute("user",user);
    %>
debug发现uname和upass 值为NULL,我到底怎样才能取不为NULL啊,郁闷死我了,还以为好了。
私信我,把代码发我邮箱吧,我看看
逆天邪龙

引用来自“逆天邪龙”的评论

User existUser = (User) req.getSession().getAttribute("existUser")这其中"existUser"从哪来得。

引用来自“Bob1900”的评论

登录的时候会把user对象绑定的session,session.setAttrbute("existUser", user);
我好想还是不对,我发input中type="text" name="uname"
然后<%
      String uname = request.getParameter("uname");
      String upass = request.getParameter("upass");
      User user = new User();
      user.setUname(uname);
      user.setUpass(upass);
      session.setAttribute("user",user);
    %>
debug发现uname和upass 值为NULL,我到底怎样才能取不为NULL啊,郁闷死我了,还以为好了。
逆天邪龙
谢谢你的回答弄好了,我发现if (existUser != null) {
// 已经登录,放行
chain.doFilter(req, res);
System.out.println("UserLimitFilter doFilter 执行完毕...");
return;
我要改成if (existUser != null && existUser.getUname()!=null)
Bob2100
Bob2100

引用来自“逆天邪龙”的评论

User existUser = (User) req.getSession().getAttribute("existUser")这其中"existUser"从哪来得。

引用来自“Bob1900”的评论

登录的时候会把user对象绑定的session,session.setAttrbute("existUser", user);

引用来自“逆天邪龙”的评论

我现在有个问题好奇怪,直接登录后台地址第一次会限制登录跳转到登录界面,但再次输入同样的后台地址就直接登上去了?
jsp页面


    <div class="name">
      管理员账号:
      
    </div>
    <div class="password">
      密 码:
      
    </div>

    <div class="login">
      登录
    </div>
    <%
      User user = new User();
      user.setUname(request.getParameter("uname"));
      user.setUpass(request.getParameter("upass"));
      session.setAttribute("user",user);
    %>
  
是否是登录状态,是根据session里是否有值,如果没有跳转到登录页面,那应该是你session里已经有值了
逆天邪龙

引用来自“逆天邪龙”的评论

User existUser = (User) req.getSession().getAttribute("existUser")这其中"existUser"从哪来得。

引用来自“Bob1900”的评论

登录的时候会把user对象绑定的session,session.setAttrbute("existUser", user);
第一次看到的情况:得到的user为空
UserLimitFilter doFilter 执行了...
path/platform/applist.jsp
null
UserLimitFilter doFilter 执行完毕222...
UserLimitFilter doFilter 执行了...
path/login/login.jsp
UserLimitFilter doFilter 执行完毕...
第二次看到的:这次直接就不为空了,我都没进入登录页面数账号密码呢!!!
UserLimitFilter doFilter 执行了...
path/platform/applist.jsp
com.adups.wapcms.vo.User@1192ac7c
UserLimitFilter doFilter 执行完毕111...
UserLimitFilter doFilter 执行了...
path/platform/getapplist.do
com.adups.wapcms.vo.User@1192ac7c
UserLimitFilter doFilter 执行完毕111...
逆天邪龙

引用来自“逆天邪龙”的评论

User existUser = (User) req.getSession().getAttribute("existUser")这其中"existUser"从哪来得。

引用来自“Bob1900”的评论

登录的时候会把user对象绑定的session,session.setAttrbute("existUser", user);
<div class="name">
  管理员账号:
   //
</div>
<div class="password">
  密 码:
   //
</div>
<div class="login"> //
  登录 //
</div>
逆天邪龙

引用来自“逆天邪龙”的评论

User existUser = (User) req.getSession().getAttribute("existUser")这其中"existUser"从哪来得。

引用来自“Bob1900”的评论

登录的时候会把user对象绑定的session,session.setAttrbute("existUser", user);
我现在有个问题好奇怪,直接登录后台地址第一次会限制登录跳转到登录界面,但再次输入同样的后台地址就直接登上去了?
jsp页面


    <div class="name">
      管理员账号:
      
    </div>
    <div class="password">
      密 码:
      
    </div>

    <div class="login">
      登录
    </div>
    <%
      User user = new User();
      user.setUname(request.getParameter("uname"));
      user.setUpass(request.getParameter("upass"));
      session.setAttribute("user",user);
    %>
  
Bob2100
Bob2100

引用来自“逆天邪龙”的评论

User existUser = (User) req.getSession().getAttribute("existUser")这其中"existUser"从哪来得。
登录的时候会把user对象绑定的session,session.setAttrbute("existUser", user);
逆天邪龙
User existUser = (User) req.getSession().getAttribute("existUser")这其中"existUser"从哪来得。
Yii 2 —— Backend自动出现登录页

1.1 Backend自动出现登录页 用http://backend/访问后端时,页面会自动被重定向到http://backend/index.php?r=site%2Flogin,要求进行登录,这其中的流程是怎样的? 按照YII的理念,框架在处理...

tywali ⋅ 2016/11/09 ⋅ 0

spring security权限管理手册升级至spring security-3.1.3 编辑

费了半天劲,终于把原来基于spring security 2.0.5的权限管理手册升级到3.1.3。 除了官方已经不再支持ntlm和portal两个例子之外,其他的实例都已经通过了测试。下一步计划是对整体内容进行整...

xyz20003 ⋅ 2012/12/09 ⋅ 2

Spring security 3 非常全的文档 API 中文版

Spring Security 安全权限管理手册 序言 I. 基础篇 6.1. MD5加密 6.2. 盐值加密 6.3. 用户信息缓存 6.4. 获取当前用户信息 5.1. 数据库表结构 5.2. 初始化数据 5.3. 实现从数据库中读取资源信...

hello_bear ⋅ 2015/07/08 ⋅ 4

使用 Acegi 保护 Java 应用程序,第 1 部分: 架构概览和安全过滤器

Acegi Security System 是一种功能强大并易于使用的替代性方案,使您不必再为 Java 企业应用程序编写大量的安全代码。虽然它专门针对使用 Spring 框架编写的应用程序,但是任何类型的 Java 应...

红薯 ⋅ 2010/05/07 ⋅ 2

使用Spring Security开发基于表单的认证(一)

使用Spring Security开发基于表单的认证(一) SpringSecurity核心功能: 认证(你是谁) 授权(你能干什么) 攻击防护(防止伪造身份) 使用springsecurity的默认安全机制: 访问接口时,会弹...

JS_HCX ⋅ 04/29 ⋅ 0

Struts2重新学习之自定义拦截器(判断用户是否是登录状态)

拦截器   一:1:概念:Interceptor拦截器类似于我们学习过的过滤器,是可以再action执行前后执行的代码。是web开发时,常用的技术。比如,权限控制,日志记录。     2:多个拦截器Int...

无信不立 ⋅ 2014/07/17 ⋅ 0

spring security

Spring Security 为基于 J2EE 企业应用软件提供了全面安全服务。安全主要包括两个操作“认证”与“验证”(有时候也会叫做权限控制)。“认证”是为用户建立一个其声明的角色的过程,这个角色...

peiquan ⋅ 2014/03/25 ⋅ 0

【转】关于Filter的若干

filter的执行顺序 一直没有仔细去研究下filter ,最近系统的测试了下: 先看代码吧 FirstFilter.java package com.test.filter; import java.io.IOException; import javax.servlet.Filter;...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

Shiro权限控制框架入门2:如何将Shiro非入侵地整合到SpringMVC等Web项目中

前言:我在上一篇文章(PS:https://www.zifangsky.cn/770.html)中介绍了shiro框架的一些基本概念以及自定义Realm可以实现的自定义授权和认证的目的。在这一篇文章中我将介绍如何将Shiro与S...

pangfc ⋅ 2017/01/06 ⋅ 0

Shiro权限框架认证和授权原理介绍

1、简介 shiro是一个安全框架,是Apache的一个子项目。shiro提供了:认证、授权、加密、会话管理、与web集成、缓存等模块。 1.1、模块介绍 Authentication:用户身份识别,可以认为是登录; ...

小红牛 ⋅ 06/15 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JPA入门,配置文件的设置

<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http......

码农屌丝 ⋅ 8分钟前 ⋅ 0

Java基础——面向对象和构造器

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 静态成员介绍 为什么要有静态成员?静态成员用来...

凯哥学堂 ⋅ 10分钟前 ⋅ 0

vmware中Centos 7 linux的LVM磁盘扩容

系统是RHEL7(centos7差不多一样) 关闭系统,在vmware、设置、硬盘、扩展、输入数字大于当前系统内存、点击扩展。 开机再查看磁盘信息 fdisk -l 注意:可以看出sda磁盘增加了,但是根目录还...

gugudu ⋅ 20分钟前 ⋅ 0

JAVA线程sleep和wait方法区别

昨天面试,突然被问到sleep 和 wait的区别,一下子有点蒙,在这里记一下,以示警戒。 首先说sleep,sleep就是正在执行的线程主动让出cpu,cpu去执行其他线程,在sleep指定的时间过去后,cpu...

徐玉强 ⋅ 22分钟前 ⋅ 0

vuex学习--模块

随着项目复杂性增加,共享状态也越来越多。需要对转态操作进行分组,分组后在进行分组编写。学习一下module:状态管理器的模块组操作。 首先是声明: const moduleA={ state,mutations,g...

大美琴 ⋅ 25分钟前 ⋅ 0

Selenium 简单入门

安装 pip install selenium 驱动下载 https://chromedriver.storage.googleapis.com/index.html 下载最新的驱动,放入path中,可以放入Python的scripts目录下,也可以放入Chrome安装目录,并...

阿豪boy ⋅ 26分钟前 ⋅ 0

292. Nim Game - LeetCode

Question 292. Nim Game Solution 思路:试着列举一下,就能发现一个n只要不是4的倍数,就能赢。 n 是否能赢1 true2 true3 true4 false 不论删除几,对方都能一把赢5 t...

yysue ⋅ 56分钟前 ⋅ 0

6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩

zip压缩工具 zip命令可以压缩目录和文件,-r 压缩目录。 zip使用方法 zip 1.txt.zip 1.txt //压缩文件 zip -r 123.zip 123/ //压缩目录 unzip 1.txt.zip //解压 unzip 123.zip -d /root/456...

Linux_老吴 ⋅ 今天 ⋅ 0

react-loadable使用跳坑

官方给react-loadable的定义是: A higher order component for loading components with dynamic imports. 动态路由示例 withLoadable.js import React from 'react'import Loadable fro......

pengqinmm ⋅ 今天 ⋅ 0

记录工作中遇到的坑

1、ios safari浏览器向下滚动会触发window resize事件

端木遗风 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部