gpt4 book ai didi

spring - spring-security中基于路径变量的授权

转载 作者:行者123 更新时间:2023-12-04 20:37:17 25 4
gpt4 key购买 nike

我的用例是根据 @PathVariable 参数对用户进行身份验证然后授权用户。我需要执行一些自定义代码来授权主体。我不确定在这里采取的方法 -

  • 我已经实现了一个自定义 AbstractAuthenticationProcessingFilter & AuthenticationProvider 进行身份验证,最终将角色授予主体。我可以检查 servlet 请求中的路径变量(使用 HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE),并向身份验证 token 添加其他权限。然后我可以使用内置的hasRole,hasPermission表达式来实现访问控制。
  • 我可以扩展 WebSecurityExpressionRoot 并实现自定义 AbstractSecurityExpressionHandler 并定义我自己的表达式以在拦截 URL 访问控制表达式中使用。在我的 WebSecurityExpressionRoot 实现中定义自定义方法时,我不确定如何访问 @PathVariables。

  • 哪种方法更可取,或者有另一种方法可以干净地做到这一点?

    最佳答案

    我确实有解决办法。
    在配置类中

    @Configuration
    @EnableWebSecurity
    public class SecurityConfig extends WebSecurityConfigurerAdapter

    我可以有方法
    @Override
    protected void configure(HttpSecurity http) throws Exception {
    http
    .authorizeRequests()
    .antMatchers("/student/{id}/**")
    .access("@guard.checkUserId(authentication,#id)");
    }

    而 SpEL 中的 @guard 链接到
    @Component
    public class Guard {
    @Autowired
    private UserRepository repo;

    public boolean checkUserId(Authentication authentication, int id) {
    String name = authentication.getName();
    System.out.println(name+" at "+id);
    User result = repo.findByUsername(name);
    return result != null && result.getPid() == id;
    }
    }

    在实践中,SpEL 中的#id 可以得到上一行从 {id} 中提取的值。你可以在 checkUserId 中做任何你想做的事情,返回值决定是否允许访问路径。

    关于spring - spring-security中基于路径变量的授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33115446/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com