我有一個擁有不同消費者的API。我希望他們根據他們在春季安全中的角色獲取相關文檔。Swagger +彈簧安全 - 隱藏基於角色的方法
如
阿比動作A收縮到角色A和Role B的
阿比操作B是收縮到Role B的
阿比操作C是向所有人開放
我使用springfox,彈簧4,彈簧休息,安全
我知道有一個名爲@ApiIgnore的註釋,也許可以使用。
這是可能的嗎?
我有一個擁有不同消費者的API。我希望他們根據他們在春季安全中的角色獲取相關文檔。Swagger +彈簧安全 - 隱藏基於角色的方法
如
阿比動作A收縮到角色A和Role B的
阿比操作B是收縮到Role B的
阿比操作C是向所有人開放
我使用springfox,彈簧4,彈簧休息,安全
我知道有一個名爲@ApiIgnore的註釋,也許可以使用。
這是可能的嗎?
您可能已經看到了這一點,但SpringFox本身提供了配置安全性的機制。請參閱官方SpringFox文檔中的this section和this 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工作。
謝謝你的回答,但這並不能解決我的問題。我已經使用角色來保護我的應用程序,我希望文檔能夠考慮到這一點。 –
@EspenSchulstad您是否找到針對您的問題的解決方案?謝謝 – drenda
塊引用 您可以在安全配置文件中使用下面的代碼片段,你需要擴展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
}
如何將'@ ApiIgnore'是你的使用情況有用嗎?它只是防止顯示一些資源... 如果您使用Spring Security模型和表來存儲角色,用戶,權限等,您可以創建一個端點來檢索這些數據。將所有這些資源創建爲資源,因爲Swagger映射無法工作,因爲您需要在它們周圍真正注意Rest標註。 – bosco
嗯,我的意思是,也許我可以寫我自己的註釋,利用apiignore角色不存在的地方。或類似的東西。 –