本文是Spring Professional Certification Prep文章的翻译。
它将涵盖Spring Security的主题及其主要问题。
它也可以用来准备面试。
↓其他文章在目录的链接中可用↓

问题本身:
什么是身份验证和授权?身份验证是验证计算机系统用户的过程。
这是在春季发生的情况:
- 结果密码和用户名将转换为UsernamePasswordAuthenticationToken的实例。 它实现了Authentication接口。
- 令牌传递到
AuthenticationManager
对象进行验证 - 如果成功,则AM返回填充的
Authentication
对象 - 通过调用
SecurityContextHolder.getContext().setAuthentication(...)
设置安全上下文SecurityContextHolder.getContext().setAuthentication(...)
授权是验证用户具有执行操作所需角色的过程。 授权期间,将检查您是否具有访问资源的适当权限。
工艺流程:
- 通过主体,显示用户的角色
- 根据资源角色检查了用户角色
首先,进行身份验证,然后进行身份验证。
安全如何在内部工作?第一步是配置DelegatingFilterProxy
过滤器。 他将请求委托给FilterChainProxy
。
FilterChainProxy
是在构造函数中接受一个或多个SecurityFilterChain
的bean。
SeccurityFilterChain
将请求中的URL与过滤器列表进行比较。

什么是委托代理过滤器?DelegatingFilterProxy
类是实现javax.Servlet.Filter
接口的类。
这是一个特殊的过滤器,它将工作委派给其他Bean,它们也是过滤器。
什么是安全过滤器链?筛选器链实现SecurityFilterChain
接口。 Spring Security提供的实现是DefaultSecurityFilterChain。
DSFC构造函数接受几个参数。 第一个参数是请求匹配器。 其余参数是实现servlet.Filter接口的过滤器。 这是DSFC接受的所有过滤器:
ChannelProcessingFilter
SecurityContextPersistenceFilter
ConcurrentSessionFilter
- 任何身份验证。 筛选器:
UserNamePasswordAuthenticationFilter
/ CasAythenticationFilter
/ BasicAuthenticationFilter
SecurityContextHolderAwareRequestFilter
JaasApiIntegrationFilter
RemeberMeAuthenticationFilter
AnonymusAuthenticationFilter
ExceptionTranslationFilter
FilterSecurityInterceptor
什么是安全上下文?主要对象是SecurityContextHolder
。 在此存储有关当前安全上下文的详细信息,例如,当前正在使用该应用程序的主体的详细信息。 默认情况下, ThreadLocal
用于存储。
getContext()
方法返回的对象是SecurityContext
。 它允许您获取和设置Authentication
对象。
Authentication
表示以下属性:
- 授予委托人的权力的集合
- 用户识别数据(登录名,密码)
- 详细信息-添加。 信息(如果需要)。 可能为空
- 校长
- 身份验证标志-布尔变量,指示主体是否成功通过测试
如何在特定的URL上设置用户点击拦截? @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests()
*在antMatchers和mvcMatchers()方法中是什么意思?此表达的意思是“任何”。
有两种类型:
*
-仅在使用它的级别截取。
例如,如果用户关注以下内容,则模式“ / orders / *”将检查用户的权限
/订单/外星人或/订单/ 1,但不是/订单/外星人/ 1。
**
-在所有级别拦截。
任何请求都会被检查/订单/外星人/ /订单/ 1,/订单/外星人/ 1。
为什么mvcMatcher比antMatcher更安全?因为antMatcher(“/service”)
仅将请求路径映射到“/service”
,而mvcMatcher(“/service”)
映射到“/service”
, “/service.html”
“/service”
“/service.html”
,“ / service.abc” 。
Spring是否支持密码哈希? 什么是盐?是的,确实如此。 有一个用于散列的PasswordEncoder
接口,它仅包含一种方法:
static PasswordEncoder createDelegatingPasswordEncoder()
,它返回默认的DelegatePasswordEncoder
。
Salt用于计算密码哈希值。 这是一个随机数序列,用于将文本密码转换为哈希。 盐以清晰的形式存储在哈希密码旁边,并且可以在以后使用新的用户登录名将干净密码转换为哈希时使用。
为什么需要方法的保护? 如何安装?Spring Security支持保护Bean(例如,控制器)中的各个方法。 这是应用程序的附加保护层。
必须使用@EnableGlobalMethodSecurity
注释明确指定它。
@RolesAllowed注释有什么作用?该注释基于JSR-250。
@RolesAllowed
允许您使用角色配置对方法的访问(例如,在控制器类中)。
示例: @RolesAllowed(“ADMIN”)
仅允许具有ADMIN
角色的用户
要使用它,您需要在@Configuration类上设置@EnableGlobalMethodSecurity(jsr250Enabled=true)
+您需要将此注释放在类路径中。
告诉我们有关@PreAuthorize的信息@PreAuthorize
允许您使用SpEL配置对方法的访问。
要使用它,您需要设置@EnableGlobalMethodSecurity(prePostEnabled=true)
所有这些注释如何实现?端到端功能是通过Spring AOP(代理对象)使用的。