如何在 Spring 安全性中为嵌套 URL 设置不同的访问权限



这是我的安全配置:

protected void configure(HttpSecurity http) throws Exception {

http.authorizeRequests().antMatchers("**/feedback")
.access("hasAnyAuthority('MANAGER','EMPLOYEE')")
.and().authorizeRequests().antMatchers("/api/**","/ticket/**")
.access("isAuthenticated()")
.and().authorizeRequests().antMatchers("**/create/**")
.access("hasAnyAuthority('MANAGER','EMPLOYEE')")
.and().formLogin().loginPage("/login").failureUrl("/login?error")
.and().formLogin().defaultSuccessUrl("/ticket/all", true)
.usernameParameter("email")
.passwordParameter("password")
.and().csrf().disable();
}

我希望每个人都有权查看工单"/Ticket",但我想禁止工程师访问/ticket/create 和/ticket/**/feedback。马上

antMatchers("/api/**","/ticket/**")
.access("isAuthenticated()")

允许访问所有人。我应该如何正确执行此操作?是否有针对多个蚂蚁匹配器的某种覆盖规则?

我希望每个人都可以访问查看门票"/ticket">

每个人都是指经过身份验证的用户?或身份验证+匿名用户?

  • 对于经过身份验证的用户.antMatchers("/ticket").access("isAuthenticated()")

  • 对于身份验证+匿名.antMatchers("/ticket").permitAll()

但我想禁止工程师访问/ticket/create/ticket/**/feedback.
*工程师?您的问题信息不完整。

假设角色MANAGEREMPLOYEEENGINEER,并且都是经过身份验证的用户,然后

修改以仅允许为MANAGEREMPLOYEE创建票证

http.authorizeRequests()
.antMatchers("**/feedback")
.access("hasAnyAuthority('MANAGER','EMPLOYEE')")
.and().authorizeRequests()
.antMatchers("/api/**","/ticket/**")
.access("isAuthenticated()")
.and().authorizeRequests()
.antMatchers("**/create/**")
.access("hasAnyAuthority('MANAGER','EMPLOYEE')")

http.authorizeRequests()
.antMatchers("/ticket").access("isAuthenticated()") //or .permitAll() as explained already
.antMatchers("**/feedback", "/ticket/**", "**/create/**")
.access("hasAnyAuthority('MANAGER','EMPLOYEE')")
.antMatchers("/api/**")
.access("isAuthenticated()");

您需要添加以下代码:

.and().authorizeRequests().antMatchers("/ticket").permitAll()

代码将是:

http.authorizeRequests().antMatchers("**/feedback")
.access("hasAnyAuthority('MANAGER','EMPLOYEE')")
.and().authorizeRequests().antMatchers("/ticket")
.permitAll()
.and().authorizeRequests().antMatchers("/api/**","/ticket/**")
.access("isAuthenticated()")
.and().authorizeRequests().antMatchers("**/create/**")
.access("hasAnyAuthority('MANAGER','EMPLOYEE')")
.and().formLogin().loginPage("/login").failureUrl("/login?error")
.and().formLogin().defaultSuccessUrl("/ticket/all", true)
.usernameParameter("email")
.passwordParameter("password")
.and().csrf().disable();

希望对您有所帮助。

最新更新