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

Spring数据使用JWT

仲孙德惠
2023-03-14

(授权已经在存储库中使用@preauthorize(“hasrole('role_user')”)完成)

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

  /**
   * This section defines the user accounts which can be used for
   * authentication as well as the roles each user has.
   */
  @Override
  public void configure(AuthenticationManagerBuilder auth) throws Exception {

    auth.inMemoryAuthentication()
      .withUser("greg").password("turnquist").roles("USER").and()
      .withUser("ollie").password("gierke").roles("USER", "ADMIN");
  }

  /**
   * This section defines the security policy for the app.
   * - BASIC authentication is supported (enough for this REST-based demo)
   * - /employees is secured using URL security shown below
   * - CSRF headers are disabled since we are only testing the REST interface,
   *   not a web one.
   *
   * NOTE: GET is not shown which defaults to permitted.
   */
  @Override
  protected void configure(HttpSecurity http) throws Exception {

    http
      .httpBasic().and()
      .authorizeRequests()
        .antMatchers(HttpMethod.POST, "/employees").hasRole("ADMIN")
        .antMatchers(HttpMethod.PUT, "/employees/**").hasRole("ADMIN")
        .antMatchers(HttpMethod.PATCH, "/employees/**").hasRole("ADMIN").and()
      .csrf().disable();
  }
}

共有1个答案

韦棋
2023-03-14

这里有一个关于spring boot中JWT身份验证的很好的教程,但也适用于spring应用程序:https://auth0.com/blog/implementing-jwt-authentication-on-spring-boot/

根据您需要的SecurityConfiguration.Configure中的教程

http.authorizeRequests()
            .anyRequest().authenticated()
            .and()
            .addFilter(new JWTAuthenticationFilter(authenticationManager()))
            .addFilter(new JWTAuthorizationFilter(authenticationManager()))
            // this disables session creation on Spring Security
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);

JWTauthEnticationFilter扩展UsernamePasswordAuthenticationFilter,应用于/login URL,如果系统中存在这样的用户,则根据您的登录名/密码生成JWT令牌。

jwtauthorizationfilter验证http标头中的JWT令牌

当然,您需要添加更多的运动部件,以便在本教程中启用JWT auth。

 类似资料:
  • 我有一个spring boot应用程序,我正在尝试使用spring数据cassandra连接到cassandra数据库。下面是我的文件。 样品pp.java CassandraDataSourceConfig。JAVA 属性文件 下面是我尝试使用嵌入式tomcat服务器启动应用程序时遇到的异常(mvn spring boot:run)。应用程序无法加载无法自动连接字段的投诉:private jav

  • 我有一个类,它返回一个<代码>列表 在我的存储库中,我有一个可分页对象,它应该从第0页开始每页返回2个项目。它具有以下属性: 然后我创建一个页面 ... 这就是回归的原因: 我通过

  • 我正在寻找一个选项来执行Redis BITOP使用Spring redistemplate。我试着在网上搜索一个例子,但找不到任何类似的东西。我能够从JedisStringCommands类获得bitOp函数,但不确定如何使用它。

  • 我的项目中有两个域对象,和。s分别与单个相关联。我正在使用Spring-Data-Rest,它是抽象,所以我有这个: 当我通过HTTP获取时,我会得到这个: 但是,我不能将相同的内容发回以首先创建文档。我发现最好的办法是发布以下内容: 然而,这似乎真的很奇怪,因为: a) 现在,我在对象中嵌入了一个未命名、未类型化的链接,这不是很HATEAOS(尽管Spring似乎正确地反序列化了它)。 b)我现

  • 我正在配置elasticsearch spring应用程序,并遵循我创建的RestHighLevelClient文档: 现在我希望我所有的文档都有snake_case的命名策略,在文档上这是我发现的: 在没有进一步配置的情况下,Spring Data Elasticsearch将使用对象的属性名称作为Elasticsearch中的字段名称。这可以通过使用该属性上的@Field注释来更改单个字段。

  • 我在OpenJFX中使用Spring JPA。这个项目是JavaFX weaver,只需在pom中添加spring启动数据jpa。 然而,我的Spring JPA的开始时间是15-20秒,在Spring初始化之前,UI不会显示。当用户启动应用程序时,每次都要花很多时间! 作为一种解决方法,我尝试创建一个没有Spring的简单java fx应用程序(在这里使用这个演示),然后从main方法开始,通过