文档章节

过滤器控制用户登录

Bob2100
 Bob2100
发布于 2016/12/10 17:34
字数 273
阅读 31
收藏 0

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
粉丝 16
博文 67
码字总数 29082
作品 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”的评论

私信我,把代码发我邮箱吧,我看看
问题解决了😃
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"从哪来得。
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
0
5
Spring Security(2):常用权限拦截器

Spring Security提供了很多过滤器,它们拦截Servlet请求,并将这些请求转交给认证处理过滤器和访问角色处理过滤器,认证用户身份和用户权限,以保证web资源的安全性 SecurityContextPersist...

我爱大金子
07/25
0
0
Yii 2 —— Backend自动出现登录页

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

tywali
2016/11/09
0
0
spring security权限管理手册升级至spring security-3.1.3 编辑

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

xyz20003
2012/12/09
0
2
Spring Security--核心过滤器源码分析

我们已经知道Spring Security使用了springSecurityFillterChian作为了安全过滤的入口,这里主要分析一下这个过滤器链都包含了哪些关键的过滤器,并且各自的使命是什么。 过滤器详解 核心过滤...

小致dad
08/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

2018年终盘点:区块链真的结束了吗?

2018 年,大家依旧期待区块链出现“杀手级”应用,然而到了年关,终究还是没有。既然没有出现,只能认为“神功”尚未练成,但是这一年也没有虚度,让大家再一次领教了这个领域的跌宕起伏。 ...

酒逢知己千杯少
14分钟前
0
0
社交软件系统ThinkSNS+默认配置信息说明

感谢大家一直以来对社交软件系统ThinkSNS的关注,ThinkSNS Plus社交系统一直在不断优化完善。ThinkSNS Plus 本次于2018年12月3日更新发布。 本次重要更新说明如下: 1.优化默认配置信息,服务...

ThinkSNS账号
15分钟前
2
0
阿里云文件存储(NAS)助力业务系统承载双十一尖峰流量

2018天猫双11全球狂欢节,全天成交额再次刷新纪录达到2135亿元,其中总成交额在开场后仅仅用了2分05秒即突破100亿元,峰值的交易量达到惊人的高度,背后离不开阿里云大数据计算和存储能力的支...

阿里云官方博客
17分钟前
2
0
Frost & Sullivan权威报告:阿里云再次领跑云WAF大中华区市场

近日,国际权威分析机构Frost & Sullivan 针对Web应用防火墙(简称“WAF”)领域发布了《2017年亚太区Web应用防火墙市场报告》,阿里云以市场占有率45.8%的绝对优势连续两年领跑大中华区云WAF...

阿里云云栖社区
18分钟前
2
0
Axios使用拦截器全局处理请求重试

Axios拦截器 Axios提供了拦截器的接口,让我们能够全局处理请求和响应。Axios拦截器会在Promise的then和catch调用前拦截到。 请求拦截示例 axios.interceptors.request.use(function (conf...

kisshua
21分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部