热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

详解JavaEE使用过滤器实现登录(用户自动登录安全登录取消自动登录黑用户禁止登录)

主要介绍用户的自动登录和取消自动登录,以及实现一天自动登录或者n天实现自动登录,当用户ip被加入到黑名单之后,直接利用过滤器返回一个警告页面。接下来通过本文给大家介绍JavaEE使用过滤器实现登录的相关知识,感兴趣的朋友一起学习吧

在我们生活中,对于账户的自动登录已经很常见了,所以利用过滤器实现这个功能。

主要介绍用户的自动登录和取消自动登录,以及实现一天自动登录或者n天实现自动登录,当用户ip被加入到黑名单之后,直接利用过滤器返回一个警告页面。

过滤器的功能很是强大,我们只需要在写好的前台后servlet之后进行添加就可以实现这个功能

Ps:这个仅仅只是一个演示而已,里面的访问数据库的部分,自己随意模拟了下,主要是突出实现自动登录的功能。

前台代码:

前台代码是成功与否都在这个页面显示。用到的技术:jstl标签的应用,session读取值

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
 
 
 
 
 
 
你的密码或用户名错误。 
 
 
 

这是登录的页面

" method="post"> NAME:
PWD:
不自动登录:
一天:
七天:
欢迎您,${sessionScope.user },登录成功 模块一 模块2 取消自动登录

servlet的实现代码:

和以前的代码一样,只负责和前台交互即可:里面用到的技术有url编码,值存在COOKIE里面,存在session里面,页面跳转(转发)

public void doPost(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException { 
String name=request.getParameter("name"); 
String pwd=request.getParameter("pwd"); 
String time=request.getParameter("time"); 
if(name!=null && pwd!=null && name.equals(pwd)){//此处随意写写,后面应该去servvice-->dao访问数据库 
//这里假设登录成功了,我们把信息存入session里面 
request.getSession().setAttribute("user", name); 
//兼容中文,我们需要进行编码 
name=URLEncoder.encode(name, "utf-8"); 
pwd=URLEncoder.encode(pwd, "utf-8"); 
COOKIE c =new COOKIE("autologin", name+","+pwd);//这个value不能采用这种方式的,安全性考虑,我们必须知道采用加密,或者二次加密, 
int _time=60*60*24*Integer.valueOf(time); 
c.setMaxAge(_time); 
response.addCOOKIE(c); 
response.sendRedirect(request.getContextPath()+"/index.jsp");//在过滤器中默认的设置是拦截重定向,转发是内部直接转发,不过过滤器,不好办,但是只需要在web.xml中配置就可以了。 
}else{ 
request.getSession().setAttribute("error", "1"); 
response.sendRedirect(request.getContextPath()+"/index.jsp"); 
} 
} 

到现在为止,都感觉没有什么技术,和以前的代码一个,现在就是Filter的作用了。

安全登录:

之前我们采用过动态导入来进行安全登录,防止用户进入项目之后,不用登录,随意输入都可以进入界面,动态导入能够实现这个功能,但是,采用过滤器更好。

在过滤器中一般写的都是dofilter();只需要判断session容器里面是否为null,为null这说明这是没有登录的,直接踢回登录界面,否,则放行

代码呈上:

public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain chain) throws IOException, ServletException { 
HttpServletRequest req=(HttpServletRequest) request; 
HttpServletResponse resp=(HttpServletResponse) response; 
String session=(String) req.getSession().getAttribute("user"); 
if(session==null){ 
System.out.println("非正常登录"); 
resp.sendRedirect(req.getContextPath()+"/index.jsp"); 
}else{ 
System.out.println("成功登录"); 
chain.doFilter(req, resp); 
} 
} 

字符编码:

字符编码的问题,以前每一次都需要在servlet的dopost()里面自己手动输入,request.setCharacterEncoding("utf-8");每一个servlet都需要输入,太麻烦,我们采用过滤器实现;

代码呈上:

public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain chain) throws IOException, ServletException { 
request.setCharacterEncoding(character);//去客户端接收的编码 
response.setContentType("text/html;charset=utf-8");//设置发出去的编码 
chain.doFilter(request, response); 
} 

@Override 
public void init(FilterConfig config) throws ServletException { 
character=config.getInitParameter("character");//aharacter 设置为全局变量, 
} 

再上面的character定义为全局变量,初始值在web.xml中配置。

web.xml代码呈上:

 
character 
cn.hncu.Filter.CharacterFilter 
 
character 
UTF-8 
 
 

自动登录:

主要思路:自动登录需要判断session里面是都存有值,有,则登录过了,没有,就去本地COOKIE查找,存在,去数据库匹配,若匹配成功,就把session容器添加值。

代码呈上:

public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain chain) throws IOException, ServletException { 
//自动登录,必须要设置session里面是都有值,有,则当前登录过,没有,就要去访问COOKIE里面的数据,COOKIE里面的数据 
//是否和数据库里面的匹配,是,将session里面的值在这里设置,否,放走 
HttpServletRequest req=(HttpServletRequest) request; 
HttpServletResponse resp =(HttpServletResponse) response; 
String session =(String) req.getSession().getAttribute("user"); 
if(session==null){//说明当前没有登录过 
COOKIE cs[]=req.getCOOKIEs(); 
if(cs!=null){ 
for(COOKIE c:cs){ 
if(c.getName().equals("autologin")){ 
String value=c.getValue();//这是经过加密的,但是我们仅仅只是采用逗号连接了一下。 
String[] strs=value.split(",");//在logserlvet里面采用的是先编码,再采用逗号连接,我们这里需要反过来 
String name=URLDecoder.decode(strs[0], "utf-8"); 
String pwd=URLDecoder.decode(strs[1], "utf-8"); 
//将name,pwd数据拿到后台访问数据库,我们这里只是随便写写 
if(name.equals(pwd)){ 
req.getSession().setAttribute("user", name);//设置session里面的参数 
break; 
} 
} 
} 
} 
} 
chain.doFilter(req, resp);//一定要放走哦。。 
} 

黑名单用户

黑名单用户,不准登录,直接告诉它结果

代码呈上:

public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain chain) throws IOException, ServletException { 
HttpServletRequest req=(HttpServletRequest) request; 
HttpServletResponse resp=(HttpServletResponse) response; 
String ip=req.getRemoteAddr();//获取访问的ip; 
System.out.println(ip+"IIPP"); 
if(set.contains(ip)){//在黑名单之内 
System.out.println("set"); 
resp.getWriter().print("您属于黑名单..返回"); 
//返回也是不行的,因为index向服务器请求的时候就直接拦截了 
}else{ 
chain.doFilter(req, resp); 
} 
}

黑名单返回的类型为list最好,我这里是自己手动添加,原本应该从写一个工具类从数据库读取,不止能查,还能增删改--黑名单。

代码呈上:

Hashset 定义为全局变量,set里面含有contain,效率很高。

public void init(FilterConfig arg0) throws ServletException { 
//这里是黑名单列表,从数据库中调取出来。这里只是简单的模拟下 
set.add("192.132.0.12");//这是黑IP,这个是从后台数据库拿到的。 
set.add("localhost"); 
set.add("192.132.32.4"); 
set.add("127.0.0.1"); 
}

取消自动登录

当一直自动登录认为不安全,所以我们设置没有自动登录

之前我们知道,自动登录靠的是COOKIE里面存的技术,所以这里我们只需要将COOKIE删除就可以了

因为取消自动登录是超链接,所以写的是servlet.

代码呈上:

public void doPost(HttpServletRequest req, HttpServletResponse resp) 
throws ServletException, IOException { 
COOKIE cc=new COOKIE("autologin", "");//删除COOKIE的方法,就建立一个同名connkie,然后设置COOKIE的setmaxage=0; 
cc.setMaxAge(0); 
cc.setPath(req.getContextPath()); 
resp.addCOOKIE(cc); 
resp.sendRedirect(req.getContextPath()+"/index.jsp"); 
} 

上面这些就能实现这些简答的功能了。

以上所述是小编给大家介绍的详解JavaEE使用过滤器实现用户自动登录 安全登录 取消自动登录黑用户禁止登录的相关知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了Java的集合及其实现类,包括数据结构、抽象类和具体实现类的关系,详细介绍了List接口及其实现类ArrayList的基本操作和特点。文章通过提供相关参考文档和链接,帮助读者更好地理解和使用Java的集合类。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
author-avatar
lee某某
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有