Filter实现权限拦截

Filter实现权限拦截

在实现一个Javaweb项目时,有时候客户端获取某些资源需要一定的权限,这时候便可以在这些资源的路由上加过滤器,对客户端的身份进行验证;

例子:需要管理员权限才能访问系统资源(sys/sys.jsp)

  • 先实现一个登录注册功能:

    • 主页

      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
        <head>
          <title>$Title$</title>
        </head>
        <body>
        <h1>这里是主页面</h1>
        <a href="login.jsp">login</a>
        <a href="/logout">logout</a>
        </body>
      </html>
      
    • 登录页面

      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
        <head>
          <title>$Title$</title>
        </head>
        <body>
        <form action="/login">
          <input type="text" name="username">
          <input type="submit" value="提交">
        </form>
        </body>
      </html>
      
    • Login Servlet

      package com.kangzhu.servlet;
      import javax.servlet.ServletException;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import java.io.IOException;
      
      public class Login extends HttpServlet {
          @Override
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              String username = req.getParameter("username");
              if (username.equals("admin")) {
                  req.getSession().setAttribute("isLogin", true);
                  req.getSession().setAttribute("username", username);
                  req.getSession().setAttribute("isAdmin", true);
                  resp.sendRedirect("/index.jsp");
              }else {
                  req.getSession().setAttribute("isLogin", true);
                  req.getSession().setAttribute("username", username);
                  resp.sendRedirect("/index.jsp");
              }
          }
      
          @Override
          protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              doGet(req, resp);
          }
      }
      
    • Logout Servlet

      package com.kangzhu.servlet;
      import javax.servlet.ServletException;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import java.io.IOException;
      public class Login extends HttpServlet {
          @Override
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              String username = req.getParameter("username");
              if (username.equals("admin")) {
                  req.getSession().setAttribute("isLogin", true);
                  req.getSession().setAttribute("username", username);
                  req.getSession().setAttribute("isAdmin", true);
                  resp.sendRedirect("/index.jsp");
              }else {
                  req.getSession().setAttribute("isLogin", true);
                  req.getSession().setAttribute("username", username);
                  resp.sendRedirect("/index.jsp");
              }
          }
      
          @Override
          protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              doGet(req, resp);
          }
      }
      
    • 在web.xml中进行注册

      <servlet>
          <servlet-name>Login</servlet-name>
          <servlet-class>com.kangzhu.servlet.Login</servlet-class>
      </servlet>
      <servlet-mapping>
          <servlet-name>Login</servlet-name>
          <url-pattern>/login</url-pattern>
      </servlet-mapping>
      
      <servlet>
          <servlet-name>logout</servlet-name>
          <servlet-class>com.kangzhu.servlet.Logout</servlet-class>
      </servlet>
      <servlet-mapping>
          <servlet-name>logout</servlet-name>
          <url-pattern>/logout</url-pattern>
      </servlet-mapping>
      
  • 通过过滤器实现权限认证

    • 过滤器

      package com.kangzhu.filter;
      
      
      import javax.servlet.*;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import java.io.IOException;
      
      public class SysFilter implements Filter {
          public void init(FilterConfig filterConfig) throws ServletException {
          }
      
          public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
              HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
              HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
              Boolean isAdmin = (Boolean) httpServletRequest.getSession().getAttribute("isAdmin");
              if (isAdmin == null) {
                  httpServletResponse.sendRedirect("/error.jsp");
              }
              filterChain.doFilter(servletRequest, servletResponse);
      
          }
          
          public void destroy() {
          }
      }
      
    • 在web.xml中注册过滤器

      <filter>
          <filter-name>sysFilter</filter-name>
          <filter-class>com.kangzhu.filter.SysFilter</filter-class>
      </filter>
      <filter-mapping>
          <filter-name>sysFilter</filter-name>
          <url-pattern>/sys/*</url-pattern>
      </filter-mapping>
      
    • error.jsp

      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
        <head>
          <title>$Title$</title>
        </head>
        <body>
        <h1>请先登录管理员账户</h1>
        </body>
      </html>
      
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot实现拦截器的过程可以参考中提供的详细示例代码解析。在Spring Boot中,可以通过创建一个自定义的拦截器类来实现拦截功能。拦截器类需要实现Spring框架中的HandlerInterceptor接口,并重写其中的方法。 首先,需要创建一个拦截器类,该类需要实现HandlerInterceptor接口,并重写其中的preHandle、postHandle和afterCompletion方法。preHandle方法在请求处理之前执行,可以用于进行权限验证、日志记录等操作;postHandle方法在请求处理之后执行,可以对响应结果进行处理;afterCompletion方法在视图渲染之后执行,可以进行一些资源的清理操作。 接下来,需要在Spring Boot应用程序的配置类(通常是带有@SpringBootApplication注解的类)中注册拦截器。可以通过重写WebMvcConfigurer接口中的addInterceptors方法来实现。在该方法中,可以使用addInterceptor方法将自定义的拦截器类添加到拦截器链中,指定需要拦截的路径或排除的路径。 通过以上步骤,就可以实现拦截器在Spring Boot应用中的使用了。拦截器会在请求到达控制器方法之前进行拦截,并执行拦截器类中定义的相关逻辑。 需要注意的是,拦截器在Spring Boot中是针对Spring MVC的访问进行增强的,与Servlet技术中的过滤器(Filter)有所区别。拦截器通过动态拦截方法调用的机制来实现,而过滤器对所有访问进行增强。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值