这是我的安全配置:
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
.
*工程师?您的问题信息不完整。
假设角色MANAGER
EMPLOYEE
和ENGINEER
,并且都是经过身份验证的用户,然后
修改以仅允许为MANAGER
和EMPLOYEE
创建票证
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();
希望对您有所帮助。