昨天刚刚完成老师布置的一个Web小项目,项目中用到了两个过滤器(编码过滤、登录过滤)

比如电商网页中有些不需要登录也能访问(首页、商品详细信息...),其他都需要过滤在会话作用域(session)中是否含有个人信息对象

示例代码:

package com.star.miniShop.Filter;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List; 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; @WebFilter("/*")
public class LoginFiter implements Filter{
  //实例化一个静态的集合(这里可以改用map集合,提高性能,每次过滤可以不用for匹配)
private static List<String> urls = new ArrayList<>();
//静态代码块中向集合中存放所有可以放行的请求或网页地址(不用账号密码即可访问)
static {
urls.add("/logining");
urls.add("/shopLogin.html");
urls.add("/css");
urls.add("/js");
urls.add("/images");
urls.add("/shopHome.html");
urls.add("/HomeShop");
urls.add("/Searchs");
urls.add("/regist");
urls.add("/shopRegist.html");
} @Override
public void destroy() {
// TODO Auto-generated method stub }
     /**
* 拦截请求,看看用户是否登陆,如果没有登陆,
* 则跳转回登录页面,否则就放行
*/ @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
      //注意:ServletRequest是HttpServletRequest父接口,因此需要强转
      //同样,ServletResponse是HttpServletResponse父接口,因此需要强转 HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse res=(HttpServletResponse)response;
      //得到当前页面所在目录下全名称
String urlPattern=req.getServletPath();
      //得到页面所在服务器的绝对路径
String path = req.getRequestURI();
//System.out.println(urlPattern);
for (String url : urls) {
if(url.equals(urlPattern) || path.contains(url)) {
// System.out.println("reaource do chain...");
chain.doFilter(request, response);
//防止重复响应
return;
}
}
//如果person为null,表示没有登录
if(req.getSession().getAttribute("person")==null) {
res.sendRedirect("shopLogin.html");
}else {
//放行
chain.doFilter(request, response);
}
} @Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub } }

JavaWeb 过滤器——验证登录 防止未登录进入界面的更多相关文章

  1. vue 判断是否登录,未登录跳转到登录页

    网页一进入判断是否登录,未登录跳转到登录页面 router.js export default new Router({ routes: [ { path: '/', name: 'HelloWorl ...

  2. JavaWeb过滤器验证登录(避免未经登录进入主页)

    今天用ssh2写了个简单的系统,发现了一个问题,我这系统必须先登录成功才能进入主页,但我在浏览器里直接输入主页地址,发现也能进入,这个肯定不好,毫无安全性可言,后经查资料发现需要登录过滤器,就试了下, ...

  3. C#-WebForm-Session、Cookie-登录验证(未登录跳至登录界面)、隐藏地址栏传值

    Post 传值(看不见的传值) Get 传值(看得见的传值) Session - 全局变量组 存放位置:服务端 作用:只要里面有内容,那么这个网站中所有的C#端都能访问到这个变量 -- object类 ...

  4. Spring Filter过滤器,Spring拦截未登录用户权限限制

    转载自:http://pouyang.iteye.com/blog/695429 实现的功能:判断用户是否已登录,未登录用户禁止访问任何页面或action,自动跳转到登录页面.  比较好的做法是不管什 ...

  5. 过滤器Filter的使用(以登录为例子)

    使用过滤器步骤: (1)在web.xml文件中添加过滤器(以下例子是过滤多个请求) <!-- 用户登录过滤 --> <filter> <filter-name>lo ...

  6. asp.net mvc 自定义全局过滤器 验证用户是否登录

    一般具有用户模块的系统都需要对用户是否登录进行验证,如果用户登录了就可以继续操作,否则退回用户的登录页面 对于这样的需求我们可以通过自定义一个独立的方法来完成验证的操作,但是这样代码的重复率就大大提高 ...

  7. Asp.Net Form验证不通过,重复登录

    问题产生根源: 当然,其实应该需要保持线上所有机器环境一致!可是,写了一个小程序.使用的是4.5,aysnc/await实在太好用了,真心不想把代码修改回去. so,动了念头,在这台服务器上装个4.5 ...

  8. 采用集成的Windows验证和使用Sql Server身份验证进行数据库的登录

    采用集成的Windows验证和使用Sql Server身份验证进行数据库的登录 1.集成的Windows身份验证语法范例 1 string constr = "server=.;databa ...

  9. Django 登录验证-自动重定向到登录页

    Web项目有些场景需要做用户登录验证,以便访问不同页面. 方法一:login_required装饰器 适用于函数视图. from django.contrib.auth.decorators impo ...

随机推荐

  1. mysql的"双1设置"-数据安全的关键参数(案例分享)

    mysql的"双1验证"指的是innodb_flush_log_at_trx_commit和sync_binlog两个参数设置,这两个是是控制MySQL 磁盘写入策略以及数据安全性 ...

  2. 精读JavaScript模式(八),JS类式继承

    一.前言 这篇开始主要介绍代码复用模式(原书中的第六章),任何一位有理想的开发者都不愿意将同样的逻辑代码重写多次,复用也是提升自己开发能力中重要的一环,所以本篇也将从“继承”开始,聊聊开发中的各种代码 ...

  3. 【ASP.NET MVC系列】浅谈ASP.NET MVC资源过滤和授权

    最近比较忙,博客很久没更新了,很多博友问何时更新博文,因此,今天就花了点时间,写了本篇文章,但愿大家喜欢. 本篇文章不适合初学者,需要对ASP.NET MVC具有一定基础. 本篇文章主要从ASP.NE ...

  4. Java基础系列--this、super关键字

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8483623.html 一.概述 Java中this有两种用途,一种是用于指代当前对象,一种 ...

  5. Dijkstra——单源最短路径

    算法思想 ①从一个源点开始,找距离它最近的点顶点v ②然后以顶点v为起点,去找v能到达的顶点w,即v的邻居 比较源点直接到 v的距离和(源点到v的距离+v到w的距离) 若大于后者则更新源点的到w的开销 ...

  6. 配置 FATFS 支持长文件名

    FATFS 版本:Nov 09 14 R0.10c 在 FATFS 已经移植好的基础上,首先打开 ffconf.h 配置文件,找到如下图配置项: 可以将此值从 0 改为 1 使用 static wor ...

  7. 使用LINQ生成Where的SQL语句

    实例1-使用实例-单个语句: ; List<, , }; List<User_info> userInfoList = UserCenterBus.Select_WebSiteBas ...

  8. Spring Day 1

    概述 开发三层架构,web层 service服务层,dao持久层. web层struts2配置核心过滤器/*,通过拦截器调用目标action,action中调用service层开启事务. servic ...

  9. Host '127.0.0.1' is not allowed to connect to this MySQL server

    错误:Host  '127.0.0.1'  is  not  allowed  to  connect  to  this  MySQL  server 一般原因: MySQL数据库的配置文件my.i ...

  10. wpf学习20180606

    对象元素的子元素 有三类子元素:内容属性.集合项.值(类型转换) ------------------------------------------------------------------- ...