Ant风格的路径模式
当谈到路径匹配和模式解析时,Ant 风格的路径模式是一种常用且强大的技术。在本博客文章中,我们将探讨 Ant 风格的路径模式的基本语法和用法,并展示它在实际开发中的应用。
Ant 风格的路径模式的基本通配符:
?
:匹配一个字符。*
:匹配零个或多个字符。**
:匹配路径中的零个或多个目录,可以跨多级目录。{}
:匹配一组选择项,逗号分隔。
通配符的用法及示例:
/user/?ame
:匹配/user/name
、/user/game
等路径。/user/*
:匹配/user/name
、/user/game
、/user/123
等路径。/user/**
:匹配/user/name
、/user/game
、/user/123
、/user/files/filename
等路径。/user/{name,[a-z]+}
:匹配/user/john
、/user/mark
等路径,但不匹配/user/123
。
Ant 风格的路径模式在实际开发中的应用:
-
URL 映射:使用 Ant 风格的路径模式定义 URL 映射规则,实现灵活的请求路由。
@GetMapping("/users/{username}") public ResponseEntity<User> getUserByUsername(@PathVariable String username) { // 根据用户名查询用户信息 User user = userService.getUserByUsername(username); if (user != null) { return ResponseEntity.ok(user); } else { return ResponseEntity.notFound().build(); } }
在上述示例中,
@GetMapping("/users/{username}")
注解中的路径模式/users/{username}
使用了路径变量{username}
,可以匹配任意用户名。当请求类似于/users/john
或/users/mark
时,路径变量username
的值将被提取并用于查询对应的用户信息。 -
资源路径匹配:通过 Ant 风格的路径模式匹配资源路径,实现资源查找和访问控制。
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/admin/**").hasRole("ADMIN") .antMatchers("/users/**").hasRole("USER") .anyRequest().authenticated() .and() .formLogin() .loginPage("/login") .and() .logout() .logoutUrl("/logout") .and() .csrf().disable(); } }
在上述示例中,
HttpSecurity
对象的authorizeRequests()
方法使用了 Ant 风格的路径模式来定义不同 URL 路径的访问控制规则。例如,antMatchers("/admin/**").hasRole("ADMIN")
表示/admin/
开头的路径需要具有ADMIN
角色才能访问,antMatchers("/users/**").hasRole("USER")
表示/users/
开头的路径需要具有USER
角色才能访问。 -
路径变量解析:使用 Ant 风格的路径模式提取路径中的变量值,实现动态路径参数的解析和处理。
@GetMapping("/books/{id}") public ResponseEntity<Book> getBookById(@PathVariable Long id) { // 根据书籍ID查询书籍信息 Book book = bookService.getBookById(id); if (book != null) { return ResponseEntity.ok(book); } else { return ResponseEntity.notFound().build(); } }
在上述示例中,
@GetMapping("/books/{id}")
注解中的路径模式/books/{id}
使用了路径变量{id}
,用于匹配具体的书籍 ID。当请求类似于/books/123
或/books/456
时,路径变量id
的值将被提取并用于查询对应的书籍信息。