如何根据与Jhipster的角色限制Api中的访问

时间:2016-11-03 07:09:05

标签: java spring jhipster

我正在开发一个jhipster项目。如果我有三个角色说A,B和C,我想限制特定API的访问仅限于A& B.如何以其他用户角色无法访问Api的方式管理Api的安全性?

2 个答案:

答案 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})