我正在开发一个jhipster项目。如果我有三个角色说A,B和C,我想限制特定API的访问仅限于A& B.如何以其他用户角色无法访问Api的方式管理Api的安全性?
答案 0 :(得分:4)
根据您使用的JHipster应用程序类型,您需要的文件名为WebSecurityConfiguration
(对于整体)或MicroserviceSecurityConfiguration
(对于微服务应用程序)。
在configure
方法中,您将找到默认行
.antMatchers("/api/**").authenticated()
这意味着,您只需要通过身份验证即可访问/ api前缀后面的任何网址。
要应用某些基于自定义角色的规则,请添加一些
.antMatchers("/api/my-url/").hasRole("A")
在提到的行之前,或类似的方法,如hasAnyRole,hasAuthority或access(),用于更复杂的语句
作为替代方案,您可以对具体方法使用@Secured
或@PreAuthorize
注释,以获得更细粒度的访问控制
答案 1 :(得分:1)
在Jhipster genereated项目中,要限制任何仅由admin使用的URI路径,您需要在SecurityConfiguration.java类的configure方法中添加它。 你需要添加
.antMatchers(" /管理/ **&#34)。hasAuthority(AuthoritiesConstants.ADMIN)
提到.antMatchers中的URI。 因此,对于具有角色" ROLE_USER"的用户,它将无法使用。
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.addFilterBefore(corsFilter, UsernamePasswordAuthenticationFilter.class)
.exceptionHandling()
.authenticationEntryPoint(http401UnauthorizedEntryPoint())
.and()
.csrf()
.disable()
.headers()
.frameOptions()
.disable()
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/api/register").permitAll()
.antMatchers("/api/activate").permitAll()
.antMatchers("/api/authenticate").permitAll()
.antMatchers("/api/account/reset_password/init").permitAll()
.antMatchers("/api/account/reset_password/finish").permitAll()
.antMatchers("/api/profile-info").permitAll()
.antMatchers("/api/**").authenticated()
.antMatchers("/management/health").permitAll()
.antMatchers("/management/**").hasAuthority(AuthoritiesConstants.ADMIN)
.antMatchers("/v2/api-docs/**").permitAll()
.antMatchers("/swagger-resources/configuration/ui").permitAll()
.antMatchers("/swagger-ui/index.html").hasAuthority(AuthoritiesConstants.ADMIN)
.and()
.apply(securityConfigurerAdapter());
}
或者如果您只想限制几个特定的API,您只需添加注释
@Secured({AuthoritiesConstants.ADMIN})
在您要限制的API顶部。
您可以对任何角色执行此限制,也可以将其与逗号分开。
@Secured({AuthoritiesConstants.ADMIN,AuthoritiesConstants.SELLER})