servlet+jsp实现过滤器 防止用户未登录访问

我们可能经常会用到这一功能,比如有时,我们不希望用户没有进行登录访问后台的操作页面,而且这样的非法访问会让系统极为的不安全,所以我们常常需要进行登录才授权访问其它页面,否则只会出现登录页面,当然我的思路:

一种是在jsp页面进行session的判断,如果不存在该用户的session,就跳转到登录页面,否则执行jsp页面代码,但是你会发现这样做逻辑也简单,但是非常麻烦,如果有很多个jsp,那么就要写多个判断。

另一种则是利用过滤器,访问页面时都进行过滤验证,如果存在该用户session,则访问该页面,否则跳转到登陆页面登录,保存session后访问其它页面。

以下是我的实现

package com.test.filter;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginFilter implements Filter {
    public static final String login_page = "/test/admin/index.jsp";
 public static final String logout_page = "/test/admin/Public/login.jsp";
 public void destroy(){

 }
 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)throws ServletException, IOException {
 HttpServletRequest request = (HttpServletRequest)servletRequest;
 HttpServletResponse response = (HttpServletResponse)servletResponse;
 String currentURL = request.getRequestURI();
 String ctxPath = request.getContextPath();
 //除掉项目名称时访问页面当前路径
 String targetURL = currentURL.substring(ctxPath.length());
 HttpSession session = request.getSession(false);
 //对当前页面进行判断,如果当前页面不为登录页面
 if(!("/admin/Public/login.jsp".equals(targetURL))){
  System.out.println("1"+targetURL+"ctxPath:"+ctxPath+"currentURL:"+currentURL);
  //在不为登陆页面时,再进行判断,如果不是登陆页面也没有session则跳转到登录页面,
  if(session == null || session.getAttribute("admin") == null){
  response.sendRedirect(logout_page);
  return;
  }else{
  //这里表示正确,会去寻找下一个链,如果不存在,则进行正常的页面跳转
  filterChain.doFilter(request, response);
  return;
  }
 }else{
  //这里表示如果当前页面是登陆页面,跳转到登陆页面
  filterChain.doFilter(request, response);
  return;
 }

 }
 public void init(FilterConfig filterConfig)throws ServletException{

 }

}

接下来在web.xml中进行配置

<filter>
 <filter-name>LoginFilter</filter-name>
 <filter-class>com.test.filter.LoginFilter</filter-class>
 </filter>
 <filter-mapping>
 <filter-name>LoginFilter</filter-name>
 //这里表示对所有的以jsp后缀的文件有效,其它的无效
 <url-pattern>*.jsp</url-pattern>
</filter-mapping>

那么,这样功能就实现了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • JSP过滤器Filter配置过滤类型全部汇总

    一.配置方法 1 映射过滤应用程序中所有资源 <filter> <filter-name>loggerfilter</filter-name> <filter-class>myfilter.LoggerFilter</filter-class> </filter> <filter-mapping> <filter-name>loggerfilter</filter-name> <url-pat

  • JSP过滤器防止Xss漏洞的实现方法(分享)

    在用java进行web业务开发的时候,对于页面上接收到的参数,除了极少数是步可预知的内容外,大量的参数名和参数值都是不会出现触发Xss漏洞的字符.而通常为了避免Xss漏洞,都是开发人员各自在页面输出和数据入库等地方加上各种各样的encode方法来避免Xss问题.而由于开发人员的水平不一,加上在编写代码的过程中安全意识的差异,可能会粗心漏掉对用户输入内容进行encode处理.针对这种大量参数是不可能出现引起Xss和SQL注入漏洞的业务场景下,因此可以使用一个适用大多数业务场景的通用处理方法,牺牲少

  • JSP使用过滤器防止SQL注入的简单实现

    什么是SQL注入攻击?引用百度百科的解释: sql注入_百度百科: 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句.[1]  比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这

  • JSP用过滤器解决request getParameter中文乱码问题

    (1)客户端的数据一般是通过HTTP GET/POST方式提交给服务器,在服务器端用request.getParameter()读取参数时,很容易出现中文乱码现象. (2)用过滤器解决request中文乱码问题. (3)代码如下: package my; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ChineseFilter implements Filter { //定义

  • JSP利用过滤器解决request中文乱码问题

    本文为大家分享了JSP用过滤器解决request中文乱码问题,具体内容如下 (1)客户端的数据一般是通过HTTP  GET/POST方式提交给服务器,在服务器端用request.getParameter() 读取参数时,很容易出现中文乱码现象. (2)用过滤器解决request中文乱码问题. (3)代码如下: package my; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public clas

  • jsp中过滤器选择过滤器的写法详解

    实例如下: public class LoginCheckFilter implements Filter { private FilterConfig config=null; private String webroot=null; public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest req, ServletResponse res

  • jsp用过滤器解决中文乱码问题的方法

    定义一过滤器,实现Filtter接口 public class EncodingFilter implements Filter { @Override public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException,

  • 通过过滤器(Filter)解决JSP的Post和Request中文乱码问题

    jsp代码: import javax.servlet.*; import javax.servlet.http.*; public class CharsetFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { try { HttpServletRequest

  • JSP使用Servlet过滤器进行身份验证的方法

    本文实例讲述了JSP使用Servlet过滤器进行身份验证的方法.分享给大家供大家参考,具体如下: 1.Servlet过滤器的作用描述 (1)在HttpServletRequest到达Servlet 之前,拦截客户的HttpServletRequest. 根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据. (2)在HttpServletResponse 到达客户端之前,拦截HttpServletResponse. 根据需要检查HttpServ

  • jsp实现登录验证的过滤器

    本文实例为大家分享了jsp实现登录验证的过滤器,供大家参考,具体内容如下 1.新建一个Dynamic Web Project项目,里面新建1个filter文件.1个servlet文件和2个jsp文件,整体的框架如图所示: 2.LoginFilter.java里面的代码如下所示: package filter; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Filter; import ja

随机推荐