区块链技术博客
www.b2bchain.cn

18.博客系统项目开发之登陆拦截器完善身份验证求职学习资料

本文介绍了18.博客系统项目开发之登陆拦截器完善身份验证求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

Spring Boot 博客系统项目开发之登陆拦截器完善身份验证

18.博客系统项目开发之登陆拦截器完善身份验证

本项目的开源仓库地址为:https://github.com/ZHENFENG13/My-Blog

除 My-Blog 项目外,我也在维护另外一个开源项目,仓库地址为:https://github.com/newbee-ltd/newbee-mall

18.博客系统项目开发之登陆拦截器完善身份验证

感兴趣的朋友可以去关注一下。

文章总览

前文简单的实现了登陆功能,本文将会对功能进行完善,对后台资源请求进行身份认证,即请求拦截验证,同时完成管理员信息修改、密码修改、登陆退出功能。

知识点

  • Spring Boot 中使用拦截器
  • 登录功能完善
  • 修改密码、退出功能

环境

  • JDK 1.8 或者更高版本
  • Spring Boot 2.1.0-RELEASE
  • Maven 3+

登陆拦截器

在前一个实验中我们实现了管理员的登陆功能,该功能已经完成,但是身份认证的整个流程并没有完善,该流程中应该包括登陆功能、身份认证、访问拦截、退出功能,我们仅仅完成了第一步,因此本实验将会对该流程进行完善,将接下来的功能点完成。

举个简单点的例子,我们登陆的目的是为了能够访问后台页面(比如前一个实验中的首页,路径为 /admin/index),但是在运行前一个实验的代码时,即使我们不进行登陆操作也可以访问该页面,同学们可以自行实验,也就是说我们并没有在用户访问时进行身份认证和访问拦截,所以我们首先把访问拦截的功能给完善了,大家也都知道,实现这个功能我们通常的做法就是使用拦截器,那么接下来我们就来实现这个拦截器吧!

拦截器介绍

定义一个 Interceptor 非常简单方式也有几种,这里简单列举两种:

  • 新建类要实现 Spring 的 HandlerInterceptor 接口
  • 新建类继承实现了 HandlerInterceptor 接口的实现类,例如已经提供的实现了 HandlerInterceptor 接口的抽象类 HandlerInterceptorAdapter

HandlerInterceptor 方法介绍:

    boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)             throws Exception;      void postHandle(             HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception;      void afterCompletion(             HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception;
  • preHandle:在业务处理器处理请求之前被调用。预处理,可以进行编码、安全控制、权限校验等处理;
  • postHandle:在业务处理器处理请求执行完成后,生成视图之前执行。
  • afterCompletion:在 DispatcherServlet 完全处理完请求后被调用,可用于清理资源等,返回处理(已经渲染了页面);

定义拦截器

新建 interceptor 包,在包中新建 AdminLoginInterceptor 类,该类需要实现 HandlerInterceptor 接口,代码如下:

package com.site.blog.my.core.interceptor; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;  /**  * 后台系统身份验证拦截器  */ @Component public class AdminLoginInterceptor implements HandlerInterceptor {     @Override     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {         String uri = request.getRequestURI();         if (uri.startsWith("/admin") && null == request.getSession().getAttribute("loginUser")) {             request.getSession().setAttribute("errorMsg", "请登陆");             response.sendRedirect(request.getContextPath() + "/admin/login");             return false;         } else {             request.getSession().removeAttribute("errorMsg");             return true;         }     }     @Override     public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {     }     @Override     public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {     } }

我们只需要完善 preHandle 方法即可,同时在类声明上方添加 @Component 注解使其注册到 IOC 容器中。通过上面代码可以看出,在请求的预处理过程中读取当前 session 中是否存在 loginUser 对象,如果不存在则返回 false 并跳转至登录页面,如果已经存在则返回 true,继续做后续处理流程。

配置拦截器

在实现拦截器的相关方法之后,我们需要对该拦截器进行配置以使其生效,在 Spring Boot 1.x 版本中我们通常会继承 WebMvcConfigurerAdapter 类,但是在 Spring Boot 2.x 版本中,WebMvcConfigurerAdapter 被弃用,虽然继承 WebMvcConfigurerAdapter 这个类虽然有此便利,但在 Spring 5.0 里面已经被弃用了,官方文档也说了,WebMvcConfigurer 接口现在已经有了默认的空白方法,所以在 Spring Boot 2.x 版本下更好的做法还是实现 WebMvcConfigurer 接口。

新建 config 包,之后新建 MyBlogWebMvcConfigurer 类并实现 WebMvcConfigurer 接口,代码如下:

package com.site.blog.my.core.config;  import com.site.blog.my.core.interceptor.AdminLoginInterceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;  @Configuration public class MyBlogWebMvcConfigurer implements WebMvcConfigurer {      @Autowired     private AdminLoginInterceptor adminLoginInterceptor;      public void addInterceptors(InterceptorRegistry registry) {         // 添加一个拦截器,拦截以/admin为前缀的url路径         registry.addInterceptor(adminLoginInterceptor).addPathPatterns("/admin/**").excludePathPatterns("/admin/login").excludePathPatterns("/admin/dist/**").excludePathPatterns("/admin/plugins/**");     } }

在该配置类中,我们添加刚刚新增的 AdminLoginInterceptor 登录拦截器,并对该拦截器所拦截的路径进行配置,由于后端管理系统的所有请求路径都以 /admin 开头,所以拦截的路径为 /admin/ ,但是登陆页面以及部分静态资源文件也是以 /admin 开头,所以需要将这些路径排除,配置如上。

此时,重启项目,并且再去访问 index 页面,如果没登录的话就会跳回到登录页面了,拦截器生效了。

用户模块完善

用户模块不只是登录功能,还包括用户信息修改、安全退出的功能:

18.博客系统项目开发之登陆拦截器完善身份验证

新建 profile.html,前端模板代码如下:(resources/templates/admin/profile.html)

“`html

<!-- 引入工具栏sidebar-fragment --> <aside th:fragment="sidebar-fragment(path)" class="main-sidebar sidebar-dark-primary elevation-4">     <!-- Brand Logo -->     <a th:href="@{/admin/index}" class="brand-link">         <img th:src="@{/admin/dist/img/logo.png}" alt="ssm-cluster Logo" class="brand-image img-circle elevation-3"              style="opacity: .8">         <span class="brand-text font-weight-light">my blog</span>     </a>     <!-- Sidebar -->     <div class="sidebar">         <!-- Sidebar user panel (optional) -->         <div class="user-panel mt-3 pb-3 mb-3 d-flex">             <div class="image">                 <img th:src="@{/admin/dist/img/avatar5.png}" class="img-circle elevation-2" alt="User Image">             </div>             <div class="info">                 <a href="#" class="d-block" th:text="${session.loginUser}"></a>             </div>         </div>         <!-- Sidebar Menu -->         <nav class="mt-2">             <ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu"                 data-accordion="false">                 <!-- Add icons to the links using the .nav-icon class                      with font-awesome or any other icon font library -->                 <li class="nav-header">首页</li>                 <li class="nav-item">                     <a th:href="@{/admin/index}" class="nav-link">                         <i class="nav-icon fa fa-dashboard"></i>                         <p>                             首页                         </p>                     </a>                 </li>                 <li class="nav-header">系统管理</li>                 <li class="nav-item">                     <a th:href="@{/admin/profile}" class="nav-link active">                         <i class="fa fa-user-secret nav-icon"></i>                         <p>修改密码</p>                     </a>                 </li>                 <li class="nav-item">                     <a th:href="@{/admin/logout}" class="nav-link">                         <i class="fa fa-sign-out nav-icon"></i>                         <p>安全退出</p>                     </a>                 </li>                 </li>             </ul>         </nav>

Spring Boot 博客系统项目开发之登陆拦截器完善身份验证

18.博客系统项目开发之登陆拦截器完善身份验证

本项目的开源仓库地址为:https://github.com/ZHENFENG13/My-Blog

除 My-Blog 项目外,我也在维护另外一个开源项目,仓库地址为:https://github.com/newbee-ltd/newbee-mall

18.博客系统项目开发之登陆拦截器完善身份验证

感兴趣的朋友可以去关注一下。

文章总览

前文简单的实现了登陆功能,本文将会对功能进行完善,对后台资源请求进行身份认证,即请求拦截验证,同时完成管理员信息修改、密码修改、登陆退出功能。

知识点

  • Spring Boot 中使用拦截器
  • 登录功能完善
  • 修改密码、退出功能

环境

  • JDK 1.8 或者更高版本
  • Spring Boot 2.1.0-RELEASE
  • Maven 3+

登陆拦截器

在前一个实验中我们实现了管理员的登陆功能,该功能已经完成,但是身份认证的整个流程并没有完善,该流程中应该包括登陆功能、身份认证、访问拦截、退出功能,我们仅仅完成了第一步,因此本实验将会对该流程进行完善,将接下来的功能点完成。

举个简单点的例子,我们登陆的目的是为了能够访问后台页面(比如前一个实验中的首页,路径为 /admin/index),但是在运行前一个实验的代码时,即使我们不进行登陆操作也可以访问该页面,同学们可以自行实验,也就是说我们并没有在用户访问时进行身份认证和访问拦截,所以我们首先把访问拦截的功能给完善了,大家也都知道,实现这个功能我们通常的做法就是使用拦截器,那么接下来我们就来实现这个拦截器吧!

拦截器介绍

定义一个 Interceptor 非常简单方式也有几种,这里简单列举两种:

  • 新建类要实现 Spring 的 HandlerInterceptor 接口
  • 新建类继承实现了 HandlerInterceptor 接口的实现类,例如已经提供的实现了 HandlerInterceptor 接口的抽象类 HandlerInterceptorAdapter

HandlerInterceptor 方法介绍:

    boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)             throws Exception;      void postHandle(             HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception;      void afterCompletion(             HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception;
  • preHandle:在业务处理器处理请求之前被调用。预处理,可以进行编码、安全控制、权限校验等处理;
  • postHandle:在业务处理器处理请求执行完成后,生成视图之前执行。
  • afterCompletion:在 DispatcherServlet 完全处理完请求后被调用,可用于清理资源等,返回处理(已经渲染了页面);

定义拦截器

新建 interceptor 包,在包中新建 AdminLoginInterceptor 类,该类需要实现 HandlerInterceptor 接口,代码如下:

package com.site.blog.my.core.interceptor; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;  /**  * 后台系统身份验证拦截器  */ @Component public class AdminLoginInterceptor implements HandlerInterceptor {     @Override     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {         String uri = request.getRequestURI();         if (uri.startsWith("/admin") && null == request.getSession().getAttribute("loginUser")) {             request.getSession().setAttribute("errorMsg", "请登陆");             response.sendRedirect(request.getContextPath() + "/admin/login");             return false;         } else {             request.getSession().removeAttribute("errorMsg");             return true;         }     }     @Override     public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {     }     @Override     public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {     } }

我们只需要完善 preHandle 方法即可,同时在类声明上方添加 @Component 注解使其注册到 IOC 容器中。通过上面代码可以看出,在请求的预处理过程中读取当前 session 中是否存在 loginUser 对象,如果不存在则返回 false 并跳转至登录页面,如果已经存在则返回 true,继续做后续处理流程。

配置拦截器

在实现拦截器的相关方法之后,我们需要对该拦截器进行配置以使其生效,在 Spring Boot 1.x 版本中我们通常会继承 WebMvcConfigurerAdapter 类,但是在 Spring Boot 2.x 版本中,WebMvcConfigurerAdapter 被弃用,虽然继承 WebMvcConfigurerAdapter 这个类虽然有此便利,但在 Spring 5.0 里面已经被弃用了,官方文档也说了,WebMvcConfigurer 接口现在已经有了默认的空白方法,所以在 Spring Boot 2.x 版本下更好的做法还是实现 WebMvcConfigurer 接口。

新建 config 包,之后新建 MyBlogWebMvcConfigurer 类并实现 WebMvcConfigurer 接口,代码如下:

package com.site.blog.my.core.config;  import com.site.blog.my.core.interceptor.AdminLoginInterceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;  @Configuration public class MyBlogWebMvcConfigurer implements WebMvcConfigurer {      @Autowired     private AdminLoginInterceptor adminLoginInterceptor;      public void addInterceptors(InterceptorRegistry registry) {         // 添加一个拦截器,拦截以/admin为前缀的url路径         registry.addInterceptor(adminLoginInterceptor).addPathPatterns("/admin/**").excludePathPatterns("/admin/login").excludePathPatterns("/admin/dist/**").excludePathPatterns("/admin/plugins/**");     } }

在该配置类中,我们添加刚刚新增的 AdminLoginInterceptor 登录拦截器,并对该拦截器所拦截的路径进行配置,由于后端管理系统的所有请求路径都以 /admin 开头,所以拦截的路径为 /admin/ ,但是登陆页面以及部分静态资源文件也是以 /admin 开头,所以需要将这些路径排除,配置如上。

此时,重启项目,并且再去访问 index 页面,如果没登录的话就会跳回到登录页面了,拦截器生效了。

用户模块完善

用户模块不只是登录功能,还包括用户信息修改、安全退出的功能:

18.博客系统项目开发之登陆拦截器完善身份验证

新建 profile.html,前端模板代码如下:(resources/templates/admin/profile.html)

“`html

<!-- 引入工具栏sidebar-fragment --> <aside th:fragment="sidebar-fragment(path)" class="main-sidebar sidebar-dark-primary elevation-4">     <!-- Brand Logo -->     <a th:href="@{/admin/index}" class="brand-link">         <img th:src="@{/admin/dist/img/logo.png}" alt="ssm-cluster Logo" class="brand-image img-circle elevation-3"              style="opacity: .8">         <span class="brand-text font-weight-light">my blog</span>     </a>     <!-- Sidebar -->     <div class="sidebar">         <!-- Sidebar user panel (optional) -->         <div class="user-panel mt-3 pb-3 mb-3 d-flex">             <div class="image">                 <img th:src="@{/admin/dist/img/avatar5.png}" class="img-circle elevation-2" alt="User Image">             </div>             <div class="info">                 <a href="#" class="d-block" th:text="${session.loginUser}"></a>             </div>         </div>         <!-- Sidebar Menu -->         <nav class="mt-2">             <ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu"                 data-accordion="false">                 <!-- Add icons to the links using the .nav-icon class                      with font-awesome or any other icon font library -->                 <li class="nav-header">首页</li>                 <li class="nav-item">                     <a th:href="@{/admin/index}" class="nav-link">                         <i class="nav-icon fa fa-dashboard"></i>                         <p>                             首页                         </p>                     </a>                 </li>                 <li class="nav-header">系统管理</li>                 <li class="nav-item">                     <a th:href="@{/admin/profile}" class="nav-link active">                         <i class="fa fa-user-secret nav-icon"></i>                         <p>修改密码</p>                     </a>                 </li>                 <li class="nav-item">                     <a th:href="@{/admin/logout}" class="nav-link">                         <i class="fa fa-sign-out nav-icon"></i>                         <p>安全退出</p>                     </a>                 </li>                 </li>             </ul>         </nav>

Spring Boot 博客系统项目开发之登陆拦截器完善身份验证

18.博客系统项目开发之登陆拦截器完善身份验证

本项目的开源仓库地址为:https://github.com/ZHENFENG13/My-Blog

除 My-Blog 项目外,我也在维护另外一个开源项目,仓库地址为:https://github.com/newbee-ltd/newbee-mall

18.博客系统项目开发之登陆拦截器完善身份验证

感兴趣的朋友可以去关注一下。

文章总览

前文简单的实现了登陆功能,本文将会对功能进行完善,对后台资源请求进行身份认证,即请求拦截验证,同时完成管理员信息修改、密码修改、登陆退出功能。

知识点

  • Spring Boot 中使用拦截器
  • 登录功能完善
  • 修改密码、退出功能

环境

  • JDK 1.8 或者更高版本
  • Spring Boot 2.1.0-RELEASE
  • Maven 3+

登陆拦截器

在前一个实验中我们实现了管理员的登陆功能,该功能已经完成,但是身份认证的整个流程并没有完善,该流程中应该包括登陆功能、身份认证、访问拦截、退出功能,我们仅仅完成了第一步,因此本实验将会对该流程进行完善,将接下来的功能点完成。

举个简单点的例子,我们登陆的目的是为了能够访问后台页面(比如前一个实验中的首页,路径为 /admin/index),但是在运行前一个实验的代码时,即使我们不进行登陆操作也可以访问该页面,同学们可以自行实验,也就是说我们并没有在用户访问时进行身份认证和访问拦截,所以我们首先把访问拦截的功能给完善了,大家也都知道,实现这个功能我们通常的做法就是使用拦截器,那么接下来我们就来实现这个拦截器吧!

拦截器介绍

定义一个 Interceptor 非常简单方式也有几种,这里简单列举两种:

  • 新建类要实现 Spring 的 HandlerInterceptor 接口
  • 新建类继承实现了 HandlerInterceptor 接口的实现类,例如已经提供的实现了 HandlerInterceptor 接口的抽象类 HandlerInterceptorAdapter

HandlerInterceptor 方法介绍:

    boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)             throws Exception;      void postHandle(             HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception;      void afterCompletion(             HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception;
  • preHandle:在业务处理器处理请求之前被调用。预处理,可以进行编码、安全控制、权限校验等处理;
  • postHandle:在业务处理器处理请求执行完成后,生成视图之前执行。
  • afterCompletion:在 DispatcherServlet 完全处理完请求后被调用,可用于清理资源等,返回处理(已经渲染了页面);

定义拦截器

新建 interceptor 包,在包中新建 AdminLoginInterceptor 类,该类需要实现 HandlerInterceptor 接口,代码如下:

package com.site.blog.my.core.interceptor; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;  /**  * 后台系统身份验证拦截器  */ @Component public class AdminLoginInterceptor implements HandlerInterceptor {     @Override     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {         String uri = request.getRequestURI();         if (uri.startsWith("/admin") && null == request.getSession().getAttribute("loginUser")) {             request.getSession().setAttribute("errorMsg", "请登陆");             response.sendRedirect(request.getContextPath() + "/admin/login");             return false;         } else {             request.getSession().removeAttribute("errorMsg");             return true;         }     }     @Override     public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {     }     @Override     public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {     } }

我们只需要完善 preHandle 方法即可,同时在类声明上方添加 @Component 注解使其注册到 IOC 容器中。通过上面代码可以看出,在请求的预处理过程中读取当前 session 中是否存在 loginUser 对象,如果不存在则返回 false 并跳转至登录页面,如果已经存在则返回 true,继续做后续处理流程。

配置拦截器

在实现拦截器的相关方法之后,我们需要对该拦截器进行配置以使其生效,在 Spring Boot 1.x 版本中我们通常会继承 WebMvcConfigurerAdapter 类,但是在 Spring Boot 2.x 版本中,WebMvcConfigurerAdapter 被弃用,虽然继承 WebMvcConfigurerAdapter 这个类虽然有此便利,但在 Spring 5.0 里面已经被弃用了,官方文档也说了,WebMvcConfigurer 接口现在已经有了默认的空白方法,所以在 Spring Boot 2.x 版本下更好的做法还是实现 WebMvcConfigurer 接口。

新建 config 包,之后新建 MyBlogWebMvcConfigurer 类并实现 WebMvcConfigurer 接口,代码如下:

package com.site.blog.my.core.config;  import com.site.blog.my.core.interceptor.AdminLoginInterceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;  @Configuration public class MyBlogWebMvcConfigurer implements WebMvcConfigurer {      @Autowired     private AdminLoginInterceptor adminLoginInterceptor;      public void addInterceptors(InterceptorRegistry registry) {         // 添加一个拦截器,拦截以/admin为前缀的url路径         registry.addInterceptor(adminLoginInterceptor).addPathPatterns("/admin/**").excludePathPatterns("/admin/login").excludePathPatterns("/admin/dist/**").excludePathPatterns("/admin/plugins/**");     } }

在该配置类中,我们添加刚刚新增的 AdminLoginInterceptor 登录拦截器,并对该拦截器所拦截的路径进行配置,由于后端管理系统的所有请求路径都以 /admin 开头,所以拦截的路径为 /admin/ ,但是登陆页面以及部分静态资源文件也是以 /admin 开头,所以需要将这些路径排除,配置如上。

此时,重启项目,并且再去访问 index 页面,如果没登录的话就会跳回到登录页面了,拦截器生效了。

用户模块完善

用户模块不只是登录功能,还包括用户信息修改、安全退出的功能:

18.博客系统项目开发之登陆拦截器完善身份验证

新建 profile.html,前端模板代码如下:(resources/templates/admin/profile.html)

“`html

<!-- 引入工具栏sidebar-fragment --> <aside th:fragment="sidebar-fragment(path)" class="main-sidebar sidebar-dark-primary elevation-4">     <!-- Brand Logo -->     <a th:href="@{/admin/index}" class="brand-link">         <img th:src="@{/admin/dist/img/logo.png}" alt="ssm-cluster Logo" class="brand-image img-circle elevation-3"              style="opacity: .8">         <span class="brand-text font-weight-light">my blog</span>     </a>     <!-- Sidebar -->     <div class="sidebar">         <!-- Sidebar user panel (optional) -->         <div class="user-panel mt-3 pb-3 mb-3 d-flex">             <div class="image">                 <img th:src="@{/admin/dist/img/avatar5.png}" class="img-circle elevation-2" alt="User Image">             </div>             <div class="info">                 <a href="#" class="d-block" th:text="${session.loginUser}"></a>             </div>         </div>         <!-- Sidebar Menu -->         <nav class="mt-2">             <ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu"                 data-accordion="false">                 <!-- Add icons to the links using the .nav-icon class                      with font-awesome or any other icon font library -->                 <li class="nav-header">首页</li>                 <li class="nav-item">                     <a th:href="@{/admin/index}" class="nav-link">                         <i class="nav-icon fa fa-dashboard"></i>                         <p>                             首页                         </p>                     </a>                 </li>                 <li class="nav-header">系统管理</li>                 <li class="nav-item">                     <a th:href="@{/admin/profile}" class="nav-link active">                         <i class="fa fa-user-secret nav-icon"></i>                         <p>修改密码</p>                     </a>                 </li>                 <li class="nav-item">                     <a th:href="@{/admin/logout}" class="nav-link">                         <i class="fa fa-sign-out nav-icon"></i>                         <p>安全退出</p>                     </a>                 </li>                 </li>             </ul>         </nav>

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 18.博客系统项目开发之登陆拦截器完善身份验证求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们