当前位置: 首页 > 知识库问答 >
问题:

Spring Boot HttpSecurity - @PreAuthorize - 如何设置身份验证过滤器?

百里业
2023-03-14

我目前正在开发一个 API 授权。所以基本上我有一个过滤器JwtAuthorizationFilter。例如,在我的 RestController 中,我想注释应该通过 @PreAuthorize(“hasRole('ADMIN')”) 过滤的请求。所以我的问题是:我如何设置WebSecurityConfigureAdapter(或任何其他东西)来将注释与JwtAuthorizationFilter链接?

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // Basically permit every request, but if needed (through @PreAuthorize) check via JwtAuthorizationFilter)
    }
}

谢谢!向塞巴斯蒂安问好

共有1个答案

姬承教
2023-03-14

JwtAuthorizationFilter的目的应该是设置身份验证。然后,SpringSecurity的默认安全方法就足够了。

您有几种选择:

如果JWT是由授权服务器创建的,那么Spring Security的默认JWT支持就足够了。Spring Security附带BearTokenAuthenticationFilterJwtAuthenticationProvider。过滤器将解析<code>授权

如果您需要自定义如何将JWT声明转换为<code>GrantedAuthority@Bean

有关完整设置的详细信息,请查看Spring Security的OAuth 2.0资源服务器示例。不过,基本上,您的配置如下所示:

java prettyprint-override">http
    .authorizeRequests((authz) -> authz
        .anyRequest().authenticated()
    )
    .oauth2ResourceServer((oauth2) -> oauth2
        .jwt(Customizer.withDefaults())
    );

Spring Security的现有支持在设计时考虑了授权服务器,但这不是必需的。

相反,您可以让您的应用程序生成自签名令牌。

您可以保留JwtAuthorizationFilter,但不清楚为什么Spring Security的现有支持不足。要添加过滤器,只需在(myFilter,BearTokenAuthenticationFilter.class)之前执行<code>addFilterBefore即可。。您可以查看BearTokenAuthenticationFilter作为创建自己的筛选器时应考虑的一些事项的示例。

 类似资料:
  • 问题内容: 前言 这是我第一次尝试过滤器,要小心。 项目介绍 我正在尝试为我们的一些应用程序最终确定SSO的构建,而且似乎步履维艰。我尝试连接的Webapp使用“身份验证”标头来确定应用程序内的用户凭据。我构建了一个Filter,希望在将标头传递到Web应用程序之前对其进行设置。 问题 该代码通过Eclipse验证,编译,加载到Tomcat,然后传递到Webapp。唯一缺少的是Authentica

  • 我使用Firefox WebDriver在Python 2.7与硒。我的python程序启动火狐浏览器,并在运行程序时访问不同的网站。但是,我需要设置具有身份验证的代理,以便当程序访问任何网站时,它将通过代理服务器访问。 关于SO也有一些类似的问题。但是,没有针对Python的Selenium Firefox WebDriver的特定解决方案。 Python Selenium WebDrive-代

  • 谁能向我解释一下,为了添加Django用户配置文件并成功验证本地运行的LDAP服务,无论是OpenLDAP还是Active Directory(如果可能的话,我需要知道如何成功设置后者),我需要采取哪些步骤?

  • 我试图完成的是为我的 rest api 提供基于 jwt 令牌的身份验证。/api 下的所有内容只能使用令牌进行访问。 我在 Web 安全配置中具有以下配置方法: 这是过滤器: 我的问题是过滤器现在应用于每个url,而不仅仅是具有 /api前缀的url。 我知道我的“配置”方法可能是错误的,但它应该是什么样子?我想要完成的就是为/api路径使用过滤器。 1 个问题:为什么有两个值来配置将应用筛选器

  • 如何在邮递员中设置curl摘要身份验证? 例如 curl 命令: 我尝试在邮递员中使用摘要式身份验证以及基本身份验证。摘要身份验证返回 401,而基本身份验证返回 500。所以我想说基本身份验证不是正确的。 在digest auth中,我设置了以下选项。 其他一切都保持默认。我还选中了“将帮助程序数据保存到请求”复选框和“更新请求”按钮。 仍然得到401。 根据响应,我得到了一个、和一个。我以前没

  • 我正在尝试在 Swift 中创建一个 iOS 应用程序,该应用程序使用 AWS Lambda 使用以下身份验证服务 - https://github.com/danilop/LambdAuth 它使用适用于 iOS 的 AWS 移动开发工具包与迪纳摩数据库和 Lambda 进行通信 - http://docs.aws.amazon.com/mobile/sdkforios/developergui