最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot攔截器實(shí)現(xiàn)登錄攔截的方法示例

 更新時(shí)間:2019年09月17日 10:43:27   作者:斷橋殘雪  
這篇文章主要介紹了SpringBoot攔截器實(shí)現(xiàn)登錄攔截的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

源碼

GitHub:https://github.com/291685399/springboot-learning/tree/master/springboot-interceptor01

SpringBoot攔截器可以做什么

可以對(duì)URL路徑進(jìn)行攔截,可以用于權(quán)限驗(yàn)證、解決亂碼、操作日志記錄、性能監(jiān)控、異常處理等

SpringBoot攔截器實(shí)現(xiàn)登錄攔截

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.RELEASE</version>
    <relativePath/>
  </parent>
  <groupId>com.wyj</groupId>
  <artifactId>springboot-interceptor01</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>springboot-interceptor01</name>
  <description>springboot攔截器</description>

  <properties>
    <java.version>1.8</java.version>
  </properties>

  <dependencies>
    <!-- springboot -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <scope>runtime</scope>
      <optional>true</optional>
    </dependency>

    <!-- lombok -->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>

    <!-- thymeleaf -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
  </dependencies>

  <build>
    <finalName>springboot-interceptor01</finalName>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>

WebMvcConfigurer:繼承WebMvcConfigurationSupport類(lèi),重寫(xiě)addInterceptors方法

/**
 * 在springboot2.0.0之后,WebMvcConfigurerAdapter已經(jīng)過(guò)時(shí)了
 * 會(huì)使用WebMvcConfigurer或者WebMvcConfigurationSupport替代
 *
 * @author wyj
 * @create 2019-06-01 21:48
 */
@Configuration
public class WebMvcConfigurer extends WebMvcConfigurationSupport {

  /**
   * 在springboot2.0.0之前繼承WebMvcConfigurerAdapter類(lèi),重寫(xiě)addInterceptors方法
   *
   * @param registry
   */
//  @Override
//  public void addInterceptors(InterceptorRegistry registry) {
//    /**
//     * 攔截器按照順序執(zhí)行,如果不同攔截器攔截存在相同的URL,前面的攔截器會(huì)執(zhí)行,后面的攔截器將不執(zhí)行
//     */
//    registry.addInterceptor(new AuthorityInterceptor())
//        .addPathPatterns("/user/**");
//    super.addInterceptors(registry);
//  }

  /**
   * 在springboot2.0.0之后實(shí)現(xiàn)WebMvcConfigurer接口,重寫(xiě)addInterceptors方法
   *
   * @param registry
   */
//  @Override
//  public void addInterceptors(InterceptorRegistry registry) {
//    /**
//     * 攔截器按照順序執(zhí)行,如果不同攔截器攔截存在相同的URL,前面的攔截器會(huì)執(zhí)行,后面的攔截器將不執(zhí)行
//     */
//    registry.addInterceptor(new AuthorityInterceptor())
//        .addPathPatterns("/user/**");
//  }

  /**
   * 在springboot2.0.0之后繼承WebMvcConfigurationSupport類(lèi),重寫(xiě)addInterceptors方法
   *
   * @param registry
   */
  @Override
  protected void addInterceptors(InterceptorRegistry registry) {
    /**
     * 攔截器按照順序執(zhí)行,如果不同攔截器攔截存在相同的URL,前面的攔截器會(huì)執(zhí)行,后面的攔截器將不執(zhí)行
     */
    registry.addInterceptor(new AuthorityInterceptor())
        .addPathPatterns("/user/**");
    super.addInterceptors(registry);
  }
}

AuthorityInterceptor:實(shí)現(xiàn)HandlerInterceptor接口,重寫(xiě)preHandle、postHandle、afterCompletion方法

  • preHandle:在請(qǐng)求處理之前進(jìn)行調(diào)用(Controller方法調(diào)用之前)
  • postHandle:請(qǐng)求處理之后進(jìn)行調(diào)用,但是在視圖被渲染之前(Controller方法調(diào)用之后)
  • afterCompletion:在整個(gè)請(qǐng)求結(jié)束之后被調(diào)用,也就是在DispatcherServlet 渲染了對(duì)應(yīng)的視圖之后執(zhí)行(主要是用于進(jìn)行資源清理工作)
@Slf4j
public class AuthorityInterceptor implements HandlerInterceptor {

  private static final Set<String> NOT_INTERCEPT_URI = new HashSet<>();//不攔截的URI

  static {
    NOT_INTERCEPT_URI.add("/user/login.html");
    NOT_INTERCEPT_URI.add("/user/login");
  }

  /**
   * 在請(qǐng)求處理之前進(jìn)行調(diào)用(Controller方法調(diào)用之前)
   */
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
               Object object) throws Exception {
    String uri = request.getRequestURI();
    if (NOT_INTERCEPT_URI.contains(uri)) {
      log.info("不攔截" + uri);
      return true;
    }
    log.info("攔截" + uri);
    HttpSession session = request.getSession();
    UserInfo userInfo = (UserInfo) session.getAttribute("user_info_in_the_session");
    if (userInfo == null) {
      throw new RuntimeException("用戶未登陸");
    }
    return true;
  }

  /**
   * 請(qǐng)求處理之后進(jìn)行調(diào)用,但是在視圖被渲染之前(Controller方法調(diào)用之后)
   */
  @Override
  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView mv) throws Exception {
  }

  /**
   * 在整個(gè)請(qǐng)求結(jié)束之后被調(diào)用,也就是在DispatcherServlet 渲染了對(duì)應(yīng)的視圖之后執(zhí)行
   * (主要是用于進(jìn)行資源清理工作)
   */
  @Override
  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception ex) throws Exception {
  }
}

UserController:

@Controller
@RequestMapping(value = "/user")
public class UserController {

  @RequestMapping(value = "/login.html")
  public String index() {
    return "login";
  }

  @RequestMapping(value = "/login")
  public String login(User user) {
    //查詢(xún)數(shù)據(jù)庫(kù),我這里直接寫(xiě)死
    User dbUser = new User(1, "zhangsan", "123456", "admin");
    if (dbUser.getPassword().equals(user.getPassword())) {
      UserInfo userInfo = new UserInfo(dbUser.getId(), dbUser.getUsername(), dbUser.getRole());
      HttpSession session = getRequest().getSession();
      session.setAttribute("user_info_in_the_session", userInfo);
      return "admin";
    }
    return "login";
  }

  @RequestMapping(value = "/userInfo")
  @ResponseBody
  public String userInfo() {
    HttpSession session = getRequest().getSession();
    UserInfo userInfo = (UserInfo) session.getAttribute("user_info_in_the_session");
    return userInfo.toString();
  }

  private HttpServletRequest getRequest() {
    return ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
  }
}

User:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {

  private int id;
  private String username;
  private String password;
  private String role;

}

UserInfo: 用于存在用戶信息儲(chǔ)存在session中

@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserInfo implements Serializable {

  private int id;
  private String username; 
  private String role;

}

login.html:只是一個(gè)很簡(jiǎn)單的登錄表單

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>登陸頁(yè)面</title>
</head>
<body>
<form action="/user/login" method="post">
  登陸:<br/>
  用戶名:<input name="username" id="username" type="text"/><br/>
  密&nbsp;&nbsp;&nbsp;碼:<input name="password" id="password" type="password"/><br/>
  <input type="submit" value="登陸"/>
</form>
</body>
</html>

admin.html:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>首頁(yè)</title>
</head>
<body>
<form action="/user/userInfo" method="get">
  <input type="submit" value="用戶信息"/></form>
</body>
</html>

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 關(guān)于Seata基本使用及二階提交流程

    關(guān)于Seata基本使用及二階提交流程

    這篇文章主要介紹了關(guān)于Seata基本使用及二階提交流程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • SpringBoot配置Redis自定義過(guò)期時(shí)間操作

    SpringBoot配置Redis自定義過(guò)期時(shí)間操作

    這篇文章主要介紹了SpringBoot配置Redis自定義過(guò)期時(shí)間操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • springMVC攔截器HandlerInterceptor用法代碼示例

    springMVC攔截器HandlerInterceptor用法代碼示例

    這篇文章主要介紹了springMVC攔截器HandlerInterceptor用法代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12
  • 初識(shí)JAVA數(shù)組

    初識(shí)JAVA數(shù)組

    java語(yǔ)言中,數(shù)組是一種最簡(jiǎn)單的復(fù)合數(shù)據(jù)類(lèi)型。數(shù)組是有序數(shù)據(jù)的集合,數(shù)組中的每個(gè)元素具有相同的數(shù)據(jù)類(lèi)型,可以用一個(gè)統(tǒng)一的數(shù)組名和下標(biāo)來(lái)唯一地確定數(shù)組中的元素。數(shù)組有一維數(shù)組和多維數(shù)組。
    2014-08-08
  • 教你如何精準(zhǔn)統(tǒng)計(jì)出你的接口

    教你如何精準(zhǔn)統(tǒng)計(jì)出你的接口"QPS"

    今天小編就為大家分享一篇關(guān)于QPS的精準(zhǔn)計(jì)算方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2021-08-08
  • java開(kāi)源區(qū)塊鏈初始化創(chuàng)世區(qū)塊jdchain服務(wù)搭建

    java開(kāi)源區(qū)塊鏈初始化創(chuàng)世區(qū)塊jdchain服務(wù)搭建

    這篇文章主要介紹了java開(kāi)源區(qū)塊鏈初始化創(chuàng)世區(qū)塊jdchain的服務(wù)搭建步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • SSM使用mybatis分頁(yè)插件pagehepler實(shí)現(xiàn)分頁(yè)示例

    SSM使用mybatis分頁(yè)插件pagehepler實(shí)現(xiàn)分頁(yè)示例

    本篇文章主要介紹了SSM使用mybatis分頁(yè)插件pagehepler實(shí)現(xiàn)分頁(yè)示例,使用分頁(yè)插件的原因,簡(jiǎn)化了sql代碼的寫(xiě)法,實(shí)現(xiàn)較好的物理分頁(yè),非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-03-03
  • SpringBoot操作mongo實(shí)現(xiàn)方法解析

    SpringBoot操作mongo實(shí)現(xiàn)方法解析

    這篇文章主要介紹了SpringBoot操作mongo實(shí)現(xiàn)方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • spring中@Bean和@Component的區(qū)別及說(shuō)明

    spring中@Bean和@Component的區(qū)別及說(shuō)明

    文章主要介紹了@Bean和@Component兩個(gè)注解在Spring框架中的定義、作用范圍、創(chuàng)建方式、掃描和識(shí)別機(jī)制以及使用場(chǎng)景和建議
    2024-12-12
  • java實(shí)現(xiàn)文件上傳下載

    java實(shí)現(xiàn)文件上傳下載

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)文件上傳下載功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08

最新評(píng)論

临澧县| 玉林市| 当阳市| 阿拉善右旗| 靖边县| 尖扎县| 东台市| 都安| 三原县| 江山市| 凌云县| 玉树县| 彰化市| 辽阳市| 闻喜县| 乌兰县| 巢湖市| 绩溪县| 泸溪县| 鹤岗市| 镶黄旗| 浦东新区| 松溪县| 肇庆市| 绍兴市| 苏尼特右旗| 永靖县| 泾川县| 泽普县| 麻栗坡县| 天祝| 若尔盖县| 丹寨县| 绵阳市| 怀化市| 招远市| 静安区| 景宁| 博爱县| 彰化县| 苍梧县|