不管我读了多少 Spring 安全是一个陌生的概念。任何指针?

No matter how much I read Spring Security is an alien concept. Any pointers?

我有以下要求ui我需要在一个项目中实现,但是无论我阅读了多少关于 spring 安全的书籍或文章,我都无法弄清楚配置方法其实都在做。

我的要求ui意见如下

  1. 当对 /api/** 进行 REST 调用时,我只需要检查用户是否在 header 中包含了一个令牌,如果是这样,我需要使用内部组件。如果令牌不存在或无效,我只想 return 向客户端发送 401。

如果令牌有效,则它们通过身份验证并可以继续到相应的控制器。基于角色的身份验证不是 required,所以我假设这是 permitAll() 出现的地方?

  1. 对执行器 /info、/health 的其余调用不需要ui重新对用户进行身份验证

  2. 调用 /hawtio 和 /jolokia requi与第 1 部分相同),但如果令牌不存在,它们将被重定向到登录页面,在那里它们可以输入用户名和密码。然后使用内部服务验证用户名和密码,并将生成的令牌添加到用户 header。用户还可以注销网络 ui,这应该 return 他们到登录页面。

例如,如果我们以下面的例子为例。

@Override
protected void configure(HttpSecurity http) throws Exception {
 http
       **.authorizeRequests()**
       .antMatchers("/resources/**")**.permitAll()**
       .anyRequest()**.authenticated()**
       .and()
       .formLogin()
       .loginPage("/login")
       **.permitAll()**
       .and()
       .logout()
       **.permitAll()**.logoutRequestMatcher(new AntPathRequestMatcher("/logout"));
}

我用**包围的部分有什么意义 **

我想我了解对 /resources/** 的 REST 调用直接通过,无需用户进行身份验证。但是下一行

.anyRequest().authenticated()

让我很困惑。我想我知道它是在说明所有其他请求 require 用户要进行身份验证。但是通过什么认证?您如何获得身份验证?如果未通过身份验证会怎样?

感谢任何帮助。

.authorizeRequests() 表示您要开始配置应检查对哪些端点的请求以进行授权。

.antMatchers("/resources/**")**.permitAll()** 在这里你是说所有对 /resources/** 的请求都是允许的,无需任何授权。

最后 2 个 permitAll 是为了让客户端可以访问登录端点和注销端点。

所有这些都是 spring 安全的绝对基础。并且在互联网上的许多教程中都在谈论。

如果您真的打算使用 spring 安全性,我建议您花一些时间阅读 spring 安全性 https://docs.spring.io/spring-security/reference/servlet/architecture.html 的体系结构,以便了解基础知识。不然你会过得很辛苦。

与 spring 安全文档成为朋友,因为它比教程对您的帮助要大得多。