spring security 学习笔记(二)

核心组件

SecurityContextHolder

spring security框架的核心是SecurityContextHolder。与安全有关的信息内容都会被存储在SecurityContextHolder里,其中包括用户的信息。默认情况SecurityContextHolder用一个ThreadLocal来存储信息。这样做的好处就是在同一个线程里面执行的方法可以随时调用SecurityContext,而不必把SecurityContext作为一个参数传递给要调用的方法。

获取当前用户的信息

我们在SecurityContextHolder里存储了当前用户和应用程序相关的信息。Spring Security用Authentication对象代表这些信息。Authentication对象不需要自己创建,Spring Security会自动将信息封装到Authentication对象里。可以通过下面的代码,在应用程序中的任何地方获取当前用户的认证信息

Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();

if (principal instanceof UserDetails) {
  String username = ((UserDetails)principal).getUsername();
} else {
  String username = principal.toString();
}

 getContext()方法返回一个SecurityContext的对象,SecurityContextHolder就是把SecurityContext保存在ThreadLocal里的。Spring Security大部分认证方法都会返回一个UserDetails对象作为用户信息。

UserDetails

UserDetails是spring security框架中的重要接口,UserDetails代表一个当前用户。在应用程序自己的用户信息和Spring Security需要的用户信息之间,需要UserDetails来转换。我们经常需要将从SecurityContext中获取的用户信息转换成程序所需要的用户信息,以便可以调用业务方法如getEmail() getAddress()等应用程序用户所特有的方法。

GrantedAuthority

通过字面可以看出是和授权有关的类。Authentication.getAuthorities()是授权的重要方法,它返回一组Authority对象。一个GrantedAuthority代表一种权限同时被赋给一个账号,使其拥有该权限。授权通常是基于角色的。

总结

SecurityContextHolder:提供访问SecurityContext的方法。

SecurityContext:保存Authentication和可能与请求有关的安全信息。

Authentication:代表用户和程序相关信息。

GrantedAuthority:代表应用范围内的权限,通常被授予给用户。

UserDetails:代表用户的基本信息,通常用UserDetails来构建Authenitcation对象。

UserDetailsService:用来构建UserDetails。

猜你喜欢

转载自flyboy-0678-163-com.iteye.com/blog/1559606