2017-01-03 88 views
11

我有一個擁有不同消費者的API。我希望他們根據他們在春季安全中的角色獲取相關文檔。Swagger +彈簧安全 - 隱藏基於角色的方法

阿比動作A收縮到角色A和Role B的

阿比操作B是收縮到Role B的

阿比操作C是向所有人開放

我使用springfox,彈簧4,彈簧休息,安全

我知道有一個名爲@ApiIgnore的註釋,也許可以使用。

這是可能的嗎?

+0

如何將'@ ApiIgnore'是你的使用情況有用嗎?它只是防止顯示一些資源... 如果您使用Spring Security模型和表來存儲角色,用戶,權限等,您可以創建一個端點來檢索這些數據。將所有這些資源創建爲資源,因爲Swagger映射無法工作,因爲您需要在它們周圍真正注意Rest標註。 – bosco

+0

嗯,我的意思是,也許我可以寫我自己的註釋,利用apiignore角色不存在的地方。或類似的東西。 –

回答

-4

您可能已經看到了這一點,但SpringFox本身提供了配置安全性的機制。請參閱官方SpringFox文檔中的this sectionthis section的示例(注意點#14和#15)。

如果您允許不同的客戶查看這些API,但仍然無法執行這些API,則可以考慮在具有適當角色的API上添加@Secured批註。

例如:

@Secured ({"ROLE_A", "ROLE_B") 
@RequestMapping ("/open/to/both") 
public String operationA() { 
    // do something 
} 

@Secured ("ROLE_B") 
@RequestMapping ("/open/to/b/only") 
public String operationB() { 
    // do something 
} 

// No @Secured annotation here 
@RequestMapping ("/open/to/all") 
public String operationC() { 
    // do something 
} 

確保您已在SecurityConfig類添加@EnableGlobalMethodSecurity (securedEnabled = true)(或任何一個你有)爲@Secured工作。

+0

謝謝你的回答,但這並不能解決我的問題。我已經使用角色來保護我的應用程序,我希望文檔能夠考慮到這一點。 –

+0

@EspenSchulstad您是否找到針對您的問題的解決方案?謝謝 – drenda

-2

塊引用 您可以在安全配置文件中使用下面的代碼片段,你需要擴展GlobalMethodSecurityConfiguration。

@Autowired Auth2ServerConfiguration auth2ServerConfiguration;

@Override 
    protected MethodSecurityExpressionHandler createExpressionHandler() { 
     return new OAuth2MethodSecurityExpressionHandler(); 
    } 

在API的下面的代碼使用方法如下

@PreAuthorize("hasRole('ROLE_ADMIN') and hasRole('ROLE_USER')") 
@Transactional(readOnly = true) 
public @ResponseBody ModelAndView abc() { 
    //do something 
    }