首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Spring Security 的 Web 应用和指纹登录实践(4)

Spring Security 的 Web 应用和指纹登录实践(4)

指纹登录实践指纹登录和用户名密码登录区别很小,只是将密码换成了指纹特征值。下面采用 Spring Security 推荐写法                                Filter-AuthenticationProvider 的形式来定义相关组件以实现指纹登录。完整的项目地址: 。
FingerPrintTokenFingerPrintToken 增加 name 和 fingerPrint 字段,分别代表用户名和指纹特征值,如清单 16 所示:
清单 16.                                        FingerPrintToken                                函数签名
1
2
3
4
5
public class FingerPrintToken implements Authentication {
       private String name;   
       private String fingerPrint;
       ......
}




FingerPrintFilterFingerPrintFilter 处理指纹登录请求,调用 AuthenticationManager 进行验证,验证通过后调用                                SecurityContextHolder 将重新注入的 Authentication 填充到 SecurityContext                                中,如清单 17 所示:
清单 17. doFilter                                        函数签名
1
2
3
4
5
6
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
       if (Objects.equals(httpServletRequest.getRequestURI(), "/api/finger-print")) {
               // 调用 AuthenticationManager, 并填充 SecurityContext
        }
}




FingerPrintProviderFingerPrintProvider 负责处理 FingerPrintToken,需要在 supports 函数中支持处理                                FingerPrintToken。authenticate 函数负责 UserDetails                                获取,指纹校验,FingerPrintToken 的重新注入。
FingerPrintUserDetailsFingerPrintUserDetails 继承 User 并实现 UserDetails 的方法,应用的用户信息可以加载到 Spring                                Security 中使用。
FingerPrintUserDetailsServiceFingerPrintUserDetailsService 获取 FingerUserDetails。通过 UserDao 查找到 User,并将                                User 转换为 Spring Security 可识别 UserDetails。
SecurityConfigSecurityConfig 继承 WebSecurityConfigurerAdapter,需要定义 Spring Security                                配置类。Spring Security 的配置不是本文的重点,配置时只需要注意以下几点:
  • 将 FingerPrintFilter、FingerPrintProvider 添加进去。
  • 将 FingerPrintFilter 的执行顺序放置在 SecurityContextPersistenceFilter                                        之后即可。Spring Security 维护了一个 Filter 的 list,因此每个 Filter                                        是有顺序的。
  • 将 "/api/test" 请求设置为用户验证成功后才允许方问。
配置代码在 configure 函数中,如清单 18 所示:
清单 18. configure                                        函数
1
2
3
4
5
6
7
8
protected void configure(HttpSecurity http) throws Exception {
       http
              .userDetailsService(userDetailsService())
              .addFilterAfter(fingerPrintFilter(), SecurityContextPersistenceFilter.class)
              .authenticationProvider(fingerPrintProvider())
              .authorizeRequests()
              .mvcMatchers(HttpMethod.GET, "/api/test").authenticated()
}




总结在 Web 时代,用户和应用的耦合度越来越高,应用中存储了大量用户的私密信息。随着各种用户信息泄露事件的爆发,安全成为了 Web                                应用重要的一个环。Spring Security 由于其强大的功能和 Spring Framework                                的高度集成,赢得了开发人员的青睐。本文对 Spring Security 的架构设计与核心组件进行了深入浅出的介绍,分析了 Spring                                Security 在 Web 应用的集成方式,并展示了一个指纹登录的实例。
返回列表