使用Servlet Filter实现系统登录权限

Servlet Filter介绍

过滤器是一些web应用程序组件,可以绑定到一个web应用程序中。但是与其他web应用程序组件不同的是,过滤器是”链”在容器的处理过程中的。这就意味着它们会在servlet处理器之前访问一个进入的请求,并且在外发响应信息返回到客户前访问这些响应信息。这种访问使得过滤器可以检查并修改请求和响应的内容。

Filter适用的场景:

1.为一个web应用程序的新功能建立模型(可被添加到web应用程序中或者从web应用程序中删除而不需要重写基层应用程序代码)

2.向过去的代码添加新功能

3.用户授权的Filter: Filter 负责检查用户请求,根据请求过滤用户非法请求

4.日志Filter: 详细记录某些特殊的用户请求

5.负责解码的Filter: 包括对非标准编码的请求解码

Filter使用的位置:

过滤器放在web资源之前,可以在请求抵达它所应用的web资源(可以是一个Servlet、一个Jsp页面,甚至是一个HTML页面)之前截获进入的请求,并且在它返回到客户之前截获输出请求。Filter:用来拦截请求,处于客户端与被请求资源之间,目的是重用代码。Filter链,在web.xml中哪个先配置,哪个就先调用。在filter中也可以配置一些初始化参数。

Filter的用途:

1.在HttpServletRequest 到达Servlet 之前,拦截客户的HttpServletRequest

2.根据需要检查HttpServletRequest ,也可以修改HttpServletRequest 头和数据

3.在HttpServletResponse 到达客户端之前,拦截HttpServletResponse

4.根据需要检查HttpServletResponse ,可以修改HttpServletResponse 头和数据

一个Filter 可负责拦截多个请求或响应:一个请求或响应也可被多个请求拦截。

使用Filter进行系统登录权限校验

这里我们使用对session进行校验的方式,当对某一模块进行请求时,先校验当前用户的请求是否有session存在,如果有,继续访问,如果没有,即跳转到登录页。

第一步:

编写自己的Filter拦截类,拦截类需要实现servlet的filter接口

public class WebFilter implements Filter{
  @Override
  public void init(FilterConfig filterConfig) throws ServletException {

  }

  @Override
  public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) servletRequest;
    HttpServletResponse response = (HttpServletResponse) servletResponse;

    HttpSession session = request.getSession();
    String currPath = request.getRequestURI();  //当前请求的URL

    if (session.getAttribute("logined") != null) {
      filterChain.doFilter(servletRequest, servletResponse);
    } else {
      response.sendRedirect("/login.jsp");
    }
  }

  @Override
  public void destroy() {

  }
}

这里使用了拦截器链,当我们配置了多个拦截器的时候,服务器会按照web.xml中过滤器定义的先后循序组装成一条链,然后一次执行其中的doFilter()方法。

第二步:

在web.xml中配置自定义的拦截器

web.xml:

<filter>
    <filter-name>webFilter</filter-name>
    <filter-class>com.test.interceptor.WebFilter</filter-class>
    <init-param>
      <param-name>skipPath</param-name>
      <param-value>ok.jsp</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>webFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

这样,就配置好了我们自定义的拦截器,如果有多个拦截器的话,请注意拦截器配置的顺序,拦截会按照从上至下的顺序进行拦截,一般来说处理编码的拦截器配置在最上面。

通过上述步骤的操作,此时就可以通过URI进行访问。此时如果能够取得Session中的logined值时,会直接进入下一步处理,否则直接进入登录页面。从而就完成了session的校验。

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

(0)

相关推荐

  • 使用Filter实现登录权限验证

    本文实例为大家分享了用Filter实现登录权限验证的具体代码,供大家参考,具体内容如下 用户在访问任何界面时,会查询用户是否登录过,如果登录过则可以直接访问,没有登录的话跳到登录界面 web.xml配置过滤器 <filter> <filter-name>myFilter</filter-name> <filter-class>com.zyk.ctrl.MyFilter</filter-class> <!-- 配置初始化参数,指明再没有登录的

  • java使用Filter实现自动登录的方法

    本文实例为大家分享了java实现自动登录的具体代码,供大家参考,具体内容如下 当你勾选(记住登录状态),用cookie保存用户名和密码.不勾选,cookie失效. 所有的页面都要经过autoLoginFilter.java 的过滤器,在这类中,必须要判断cookies不为null,获得所有的cookie,得到name为user的cookie,进行用户名和密码的验证,如果不为null,则将user存入session. 在LoginServlet.java中,获得username和password参

  • play for scala 实现SessionFilter 过滤未登录用户跳转到登录页面

    一.编写SessionFilter.scala代码 package filters import javax.inject.{Inject, Singleton} import akka.stream.Materializer import controllers.routes import play.api.mvc.{Filter, RequestHeader, Result, Results} import scala.concurrent.Future @Singleton class S

  • java中使用Filter控制用户登录权限具体实例

    学jsp这么长时间,做的项目也有七八个了,可所有的项目都是用户登录就直接跳转到其拥有权限的页面,或者显示可访问页面的链接.使用这种方式来幼稚地控制访问权限.从来没有想过如果我没有登录,直接输入地址也可以直接访问用户的页面的. 在jsp中权限的控制是通过Filter过滤器来实现的,所有的开发框架中都集成有Filter,如果不适用开发框架则有如下实现方法: LoginFilter.java 复制代码 代码如下: public class LoginFilter implements Filter {

  • 使用Servlet Filter实现系统登录权限

    Servlet Filter介绍 过滤器是一些web应用程序组件,可以绑定到一个web应用程序中.但是与其他web应用程序组件不同的是,过滤器是"链"在容器的处理过程中的.这就意味着它们会在servlet处理器之前访问一个进入的请求,并且在外发响应信息返回到客户前访问这些响应信息.这种访问使得过滤器可以检查并修改请求和响应的内容. Filter适用的场景: 1.为一个web应用程序的新功能建立模型(可被添加到web应用程序中或者从web应用程序中删除而不需要重写基层应用程序代码) 2.

  • 使用C#程序验证系统登录用户与目录权限

    Windows用户类型:Administrator.Guest.自定义用户等:文件的权限不外乎:Read.Write.Modify.Remove等等,其中拥有所有权限的字符叫做FullControl. C#当前程序用户路径权限验证 /// <summary> /// 是否拥有程序数据路径权限 /// </summary> private static bool HasProgramDataRights=false; public static bool IsAdministrato

  • springMVC 用户登录权限验证实现过程解析

    通过上网搜资料显示,使用filter和interceptor都可以实现.不过推荐使用interceptor. 下面就使用Interceptor实现用户登录权限验证功能. 拦截器需要实现Inceptor拦截器接口的三个方法. 1.preHandle方法 顾名思义,该方法将在请求处理之前进行调用.SpringMVC 中的Interceptor 是链式的调用的,在一个应用中或者说是在一个请求中可以同时存在多个Interceptor .每个Interceptor 的调用会依据它的声明顺序依次执行,而且最

  • Servlet Filter过滤器执行顺序

    Servlet中的过滤器相当于守护后台资源的一道关卡,我们可以在过滤器中进行身份校验.权限认证.请求过滤等. 过滤器本身并不难,我们只需要知道他的定义方法.作用范围.执行顺序即可. 网上对于过滤器执行顺序的描述可能会让人产生误解. 图片来源于网络 客户端请求到达的时候,经过一次过滤器. 服务器处理完请求的时候,经过一次过滤器. 虽然经过两次过滤器,但不代表同样的代码执行了两次. 下面做了个简单的测试,看下执行结果就应该知道真正的执行流程了. 测试环境 tomcat9(servlet4.0) jd

  • 实战分布式医疗挂号系统登录接口整合阿里云短信详情

    目录 步骤1:搭建service-user用户模块 1.启动类&配置网关 步骤2:整合JWT 步骤3: 搭建service-msm短信模块(整合阿里云短信) 1.启动类&配置网关 4.三层调用 步骤4:登录页面前端 1.封装api请求 2.添加登录组件 3.登录全局事件 附加:用户认证与网关整合 1.在服务网关添加fillter 2.调整前端代码 本篇文章完成的需求: 1,登录采取弹出层的形式. 2,登录方式: (1)手机号码+手机验证码 (2)微信扫描(后文完成) 3,无注册界面,第一次

  • MySQL如何开启用户远程登录权限

    目录 MySQL开启用户远程登录权限 开放MySQL的远程访问权限 总结 MySQL开启用户远程登录权限 当在Docker中创建一个Mysql的容器后,需要使用工具如:navicate来连接容器内的MySQL服务,但是 提示Access denied for user 'root'@ 'x.x.x.x' (using password: YES) 错误,用命令进入容器确认密码没有问题,那么就可能是没有开发远程权限. 第一步:选中mysql数据库 use mysql; 第二步:修改库中user表中

  • 恢复c盘系统默认权限的bat批处理

    由于做过安全,c盘的一些权限不知道哪个地方需要设置,这里提供恢复系统默认权限的批处理方法. 复制代码 代码如下: @ECHO OFF setlocal echo =============================== echo 恢复C盘默认NTFS权限 echo ============================== title 恢复默认NTFS权限 :menu echo. echo [1] 恢复C盘默认NTFS权限[重启后生效] echo [0] 退出 echo. @echo 输

随机推荐