• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

使用类中的变量值进行身份验证的Spring Security

spring 来源:Mihir Khandekar 7次浏览

我在我的应用程序中使用了Spring Security。我基于角色(ADMIN,USER)对API进行身份验证。 有一个API端点,我想使用作为参数传递给它的变量的值来限制访问。使用类中的变量值进行身份验证的Spring Security

@Override 
protected void configure(HttpSecurity httpSecurity) throws Exception { 

    httpSecurity.csrf().disable().exceptionHandling().authenticationEntryPoint(this.unauthorizedHandler).and() 
      .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().authorizeRequests() 
      .antMatchers(HttpMethod.OPTIONS, "/**").permitAll() 
      .antMatchers("/api/**").authenticated() 
      .anyRequest().permitAll(); 

    httpSecurity.addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class); 
} 

我有一个电话

@PostMapping("/something") 
public ResponseEntity<BotResponse> handleRequest(@Valid @RequestBody SomeClass someClass) { 
     // if someClass.getSomeValue() is not present in the User permissions, then it should give an unauthorized response. 
     return value(someClass); 
} 

Spring Security的用户:

public Class User { 
    String userId; 
    String userName; 
    String authorities; 
    List<String> someList; 
    //Getters and setters for variables 
} 

和所使用的SomeClass的是:

public Class SomeClass { 
    String someValue; 
    String userName; 
    ... 
    // Getters and Setters 
} 

如果用户的someList中存在someClass.getSomeValue的值,我该如何拒绝用户?

===========解决方案如下:

根据您的问题,一种方法是将UserDetails存储在您的Spring Security认证上下文中,然后检查此上下文对象中的相关数据与作为参数传递的值。我假设你已经将所有必需的值存储在安全上下文中。
该检查可以在端点代码本身完成(如果您有少量这样的API)。如果有多个API需要相同的逻辑,则必须实现仅过滤这些API的过滤器(配置可以写入web.xml)或切入点(通过AOP)。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)