想用Filter实现一个登陆验证的功能,实现登陆成功后才能访问主页面,否则直接输入主页面的地址会自动跳转到登陆界面

  • 原理很简单,每次登陆成功后,创建一个session域对象,将登陆成功的用户名保存在session中,过滤器要做的就是在每一次跳转到jsp页面的请求时会进行过滤(因此在web.xml中要写 <url-pattern>*.jsp</url-pattern>),然后过滤器会对要跳转网页的地址进行分析,如果不是login.jsp(登录页面)页面的话就判断session中有没有值,如果有值,说明用户已经登陆,如果为null说明用户没登陆,然后将地址重定向到login.jsp(登录页面)页面,大致就这样。
    当然,这只是简单的实现这个功能而已,其实也可以扩展的,利用监听器,写一个当前在线的所有用户,保存在ServletContext域中的list集合中,同样也存一个int类型,用于记录访问量,同时,也可以实现保证用户单进单出(不能同时登陆,退出时从在线用户中移除),这些更能也不难,有时间的话我在写一写。

代码中很多地方用的System在控制台输出的,并没有提示到页面(因为太懒)

如果你细心的话,你会发现在get和post方法中我并没有对中文乱码进行处理,因为我直接写了一个过滤器。
这篇文章我会讲到用过滤器进行中文乱码及敏感词汇的处理,点这里!!!!

下面是部分代码:

UserServlet代码如下:

package com.gpf.servlet;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.gpf.model.User;
import com.gpf.service.UserService;
import com.gpf.serviceImpl.UserServiceImpl;/*** @author 朝九晚十**/
public class UserServlet extends HttpServlet {private static final long serialVersionUID = 1L;UserService service = new UserServiceImpl();User user = null;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String type = request.getParameter("type");//退出系统if("exit".equals(type)){HttpSession session = request.getSession(false);String sessionUser = (String) session.getAttribute("user");if(sessionUser!=null){session.removeAttribute("user");System.out.println("退出成功!");}else{System.out.println("退出失败,用户已经退出登录!");}request.getRequestDispatcher("index.jsp").forward(request, response);}}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String type = request.getParameter("type");//登陆验证if("login".equals(type)){String userName = request.getParameter("userName");String userPwd = request.getParameter("userPwd");user = service.login(userName);if(user!=null){if(user.getUserPwd().equals(userPwd)){HttpSession session = request.getSession();session.setAttribute("user", userName);request.getRequestDispatcher("index.jsp").forward(request, response);}else{System.out.println("密码部不正确!");request.setAttribute("userName", userName);request.setAttribute("message", "输入密码错误!请重新输入!");request.getRequestDispatcher("login.jsp").forward(request, response);}}else{System.out.println("用户名不存在!");}}}}

过滤器代码如下:

package com.gpf.util;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 javax.servlet.http.HttpSession;/*** 过滤器(拦截器),查看用户是否登陆过,未登录禁止访问页面*  * @author 朝九晚十**/
public class AuthFilter implements Filter {/*** 销毁*/@Overridepublic void destroy() {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) servletRequest;HttpServletResponse response = (HttpServletResponse) servletResponse;//获取根目录所对应的绝对路径String currentURL = request.getRequestURI();//截取到当前文件名用于比较String targetURL = currentURL.substring(currentURL.indexOf("/",1),currentURL.length());//System.out.println(targetURL);//如果session不为空就返回该session,如果为空就返回nullHttpSession session = request.getSession(false);if(!"/login.jsp".equals(targetURL)){//判断当前页面是否是重顶次昂后的登陆页面页面,如果是就不做session的判断,防止死循环if(session==null||session.getAttribute("user")==null){//如果session为空表示用户没有登陆就重定向到login.jsp页面//System.out.println("request.getContextPath()=" + request.getContextPath());  response.sendRedirect(request.getContextPath()+"/login.jsp");return;}}//继续向下执行chain.doFilter(request, response);}/*** 初始化*/@Overridepublic void init(FilterConfig arg0) throws ServletException {}}

在web.xml中添加如下代码:

<filter><filter-name>AuthFilter</filter-name><filter-class>com.gpf.util.AuthFilter</filter-class></filter><filter-mapping><filter-name>AuthFilter</filter-name><url-pattern>*.jsp</url-pattern></filter-mapping>

javaWeb项目用过滤器filter实现登陆成功后才能访问主页面,否则直接输入主页面的地址自动跳转到登陆界面相关推荐

  1. web项目中实现登陆成功后才能访问某些页面,否则自动跳转到登陆界面,以及对无限循环重定向的解决

    1.不使用过滤器实现,在需要拦截的页面通过session判断是否登陆,若没登陆则跳转到login.jsp页面: <% Admin admin = (Admin)session.getAttrib ...

  2. tomcat部署项目成功后,访问任何页面都是空白页,不报404异常

    tomcat部署项目成功后,访问任何页面都是空白页,不报404异常 项目部署成功: 页面空白: 输入一个错误的地址,也是空白: 原因是设置的CharchaterFilterr过滤器是全局筛选: @We ...

  3. 界面登录、登陆后才能访问另外页面

    1.//登录页面 <!DOCKTYPE html> <html> <head runat="server">     <meta http ...

  4. 通过session来设置登录主界面时,通过过滤器filter判断是否已经登录过,如果已经登陆过可以直接访问主界面,如果没有,需要重新登陆

           以下通过session来设置登录主界面时,通过过滤器filter判断是否已经登录过,如果已经登陆过可以直接访问主界面,如果没有,需要重新登陆. 实现功能,当第一次登陆时,经过账号密码判断 ...

  5. JavaWeb登陆成功后跳转到上一个页面

    JavaWeb登陆成功后跳转到上一个页面,这个标题注定要词不达意,你可能会遇到这样的情形,当点击页面的某个请求时,由于用户未登录,需要跳转到登录页,用户登录成功后,再跳转到上一个页面:还有一种情况,多 ...

  6. Spring security/Shiro ---登陆成功后返回登陆前界面<页面重定向>

    Spring security ---登陆成功后返回登陆前界面<页面重定向> 问题:在登陆/退出成功后,我们往往通过http.formLogin().successForwardUrl() ...

  7. shiro登陆成功后被拦截_Springboot+Shiro+redis整合

    1.Shiro是Apache下的一个开源项目,我们称之为Apache Shiro.它是一个很易用与Java项目的的安全框架,提供了认证.授权.加密.会话管理,与spring Security 一样都是 ...

  8. java中登陆界面怎么连接到下一个界面啊_JavaWeb登陆成功后跳转到上一个页面

    JavaWeb登陆成功后跳转到上一个页面,这个标题注定要词不达意,你可能会遇到这样的情形,当点击页面的某个请求时,由于用户未登录,需要跳转到登录页,用户登录成功后,再跳转到上一个页面:还有一种情况,多 ...

  9. 织梦ajax登录界面,dede织梦后台登陆成功后又跳转到登陆页面

    dede织梦后台登陆成功后又跳转到登陆页面怎么办?相信在很多个人站长朋友们在dede建站运营中都有遇到过类似的问题,在登陆界面输入账号密码后会有3-5秒的卡顿才会进入下面的页面,然后再卡顿3-5秒就跳 ...

最新文章

  1. java swing 文件选择,设置默认文件选择路径,桌面路径
  2. 带调色板的位图BMP和不带调色板的BMP
  3. python读取txt文件写入-Python读写txt文本文件的操作方法全解析
  4. html form表单提交数据并后台获取
  5. html5语义化标签marquee,高效书写HTML5,快速提升你的编码效率!
  6. 初识Mysql(part11)--我需要知道的4条Mysql语句之分组
  7. Linux命令【二】终端+Vim
  8. .db怎么复制到java里_MongoDB如何复制collection里的数据到另一个collection方法总结...
  9. pycharm定时运行python脚本_Python脚本用于定时关闭网易云音乐PC客户端
  10. java实现求数组中元素第二大的元素
  11. 微信公众请求config php,微信公众平台开发之配置与请求,微信公众平台
  12. visio2007序列号
  13. 单元测试自动生成测试用例
  14. Win10 打开MSDTC
  15. 一文搞懂JVM内存结构
  16. FH162儿童电子液晶手写板方案芯片开发
  17. 洞道干燥及计算机控制实验报告,洞道干燥实验思考题
  18. jpi多表联查_多表连接查询详解
  19. python提取人物特征_基于图像人物面部表情识别的特征提取优化方法与流程
  20. pychram+python 看源码: 按住crtl,点击函数

热门文章

  1. python预测运势_程序员来看看自己星座本月运势吧
  2. Exception authenticating MongoCredential{mechanism=null, userName=‘zhupeng‘, source=‘ksc‘, password=
  3. PS给人像照片添加超酷光效GIF动画
  4. 【代码篇】图像预处理阶段:提取图像特征
  5. 为什么会有这样的结果?
  6. 【AI机器学习入门与实战】CNN卷积神经网络识别图片验证码案例
  7. 博阳机器人_沈博阳:越来越多行业将被机器人代替
  8. Dynamo 2.x Essential Training Dynamo 2.x基本训练 Lynda课程中文字幕
  9. 2021图灵奖公布,高性能计算先驱Dongarra获奖!
  10. 最新还不错的周易起名网PHP完整源码