keycloak~管理平臺的查詢bug與自定rest中文檢索
阿新 • • 發佈:2021-07-09
對於keycloak來說,它的管理平臺在它的原始碼中的admin-client中,它會定義相關的rest介面規範;在我們使用keycloak管理平臺時,其中有一個組的查詢,在我們查詢中文組時,它是不支援的,經過測試和mysql日誌監控得到原因:
- keycloak rest使用
javax.ws.rs
包下面的註解,在使用@QueryParam
註解來接收url引數時,當出現中文時,它實現是一個urlEncode的字元 - 它本身不會對欄位進行urlDecode的操作,所以我們自己要做;而spring框架幫我們作了這事,我們自己不用做
- urlDecode截圖之前和之後
- 手動新增urlDecode程式碼
@GET @Path("search") @NoCache @Produces({MediaType.APPLICATION_JSON}) @Encoded public Response search(@QueryParam("name") String name) throws UnsupportedEncodingException { if (StringUtils.isEmpty(name)) { throw new ClientErrorException("name不能為空", Response.Status.BAD_REQUEST); } TypedQuery<GroupEntity> query = em.createQuery("select u from GroupEntity u where u.realm = :realm and lower(u.name) = :name", GroupEntity.class); log.info("group name:" + name); name = URLDecoder.decode(name, "utf-8"); log.info("group name 2:" + name); query.setParameter("name", name.trim().toLowerCase()); query.setParameter("realm", session.getContext().getRealm().getName()); List<GroupEntity> result = query.getResultList(); return Response.ok(result, APPLICATION_JSON_TYPE).build(); }
查詢中文組
[
{
"id": "d355cb9e-9557-4465-9eba-44f20b0c24ea",
"name": "測試",
"parentId": " ",
"realm": "fabao",
"attributes": []
}
]
作者:倉儲大叔,張佔嶺,
榮譽:微軟MVP
QQ:853066980
支付寶掃一掃,為大叔打賞!