第一步是能够从数据库中获取必要的信息。这将替换从我们的安全 bean 配置中读取 antMatchers() 方法的逻辑。为了做到这一点,本章的示例代码包含 JpaRequestConfigMappingService,它将从表示为 RequestConfigMapping 的数据库中获取 ant 模式和表达式的映射。比较简单的实现如下:
重要的是要注意,就像 antMatchers() 方法一样,顺序很重要。因此,我们确保结果按 sort_order 列排序。该服务创建一个 AntRequestMatcher 并将其与 SecurityConfig 相关联,该实例是 ConfigAttribute 的一个实例。这将提供 HTTP 请求到 ConfigAttribute 对象的映射,Spring Security 可以使用这些对象来保护我们的 URL。
我们需要创建一个域对象以供 JPA 映射到,如下所示:
最后,我们需要创建一个 Spring Data 存储库对象,如下所示:
为了使新服务正常工作,我们需要使用模式和访问控制映射来初始化我们的数据库。就像服务实现一样,我们的模式相当简单:
然后,我们可以使用 SecurityConfig.java 文件中的相同
antMatchers() 映射来生成
schema.sql 文件:
// src/main/resources/data.sql
-- Security Filter Metadata --
insert into security_filtermetadata(id,ant_pattern,expression,sort_order) values (110, '/admin/h2/**','permitAll',10);
insert into security_filtermetadata(id,ant_pattern,expression,sort_order) values (115, '/','permitAll',15);
insert into security_filtermetadata(id,ant_pattern,expression,sort_order) values (120, '/login/*','permitAll',20);
insert into security_filtermetadata(id,ant_pattern,expression,sort_order) values (140, '/logout','permitAll',30);
insert into security_filtermetadata(id,ant_pattern,expression,sort_order) values (130, '/signup/*','permitAll',40);
insert into security_filtermetadata(id,ant_pattern,expression,sort_order) values (150, '/errors/**','permitAll',50);
insert into security_filtermetadata(id,ant_pattern,expression,sort_order) values (160, '/admin/**','hasRole("ADMIN")',60);
insert into security_filtermetadata(id,ant_pattern,expression,sort_order) values (160, '/events/','hasRole("ADMIN")',60);
insert into security_filtermetadata(id,ant_pattern,expression,sort_order) values (170, '/**','hasRole("USER")',70);
此时,您的代码
应该以 chapter13.00-calendar 开头。