如何解决将授权和用户主体从其余客户端传递到服务器春季启动
我必须从其余客户端调用一个安全的端点,在控制器端,它要求从客户端发送权限和用户主体信息。
String endpoint="http://localhost:8096/polygons/34";
// endpoint="https://dop-int.edosdp.ericsson.se/polygon-manager/polygons/34";
HttpHeaders headers = new HttpHeaders();
headers.setBasicAuth("mahi","ChangeM6");
headers.setConnection("keep-alive");
HttpEntity<String> httpEntity = new HttpEntity<String>(headers);
ResponseEntity<Long> exchange = restTemplate.exchange(endpoint,HttpMethod.GET,httpEntity,Long.class);
如何从client发送至少一个角色(ADMIN或GUEST_USER)信息。 有什么办法可以将所有用户信息包装在虚拟会话中,并将其发送给serer。
谢谢, 玛希
解决方法
不!对客户而言,修改任何类型的会话信息(包括cookie)都是一个坏主意。应该只允许服务器这样做。
由于您的要求是检查特定网址上的用户角色,因此您可以设置自定义请求标头,并在控制器方法本身中进行检查:
示例代码:
@GetMapping("/polygons")
public String getPolygons(HttpServletRequest request) {
String userRole = request.getHeader("user-role");
if(userRole != null && userRole.toLowerCase().equals("admin")) {
System.out.print("Role provided: " + userRole);
// ...
return "some-data";
}
System.out.print("Role not provided!");
return "error";
}
您还可以在发布请求的请求正文中设置用户角色。
public class RequestParams {
private String userRole;
// ...
}
@PostMapping("/polygons")
public String getPolygons(@RequestBody RequestParams requestParams) {
String userRole = requestParams.getUserRole();
if(userRole != null && userRole.toLowerCase().equals("admin")) {
System.out.print("Role provided: " + userRole);
// ...
return "some-data";
}
System.out.print("Role not provided!");
return "error";
}
如果您要检查多个URL上的用户角色,则应考虑编写servlet过滤器。
编辑:
我认为我过去也面临过类似的情况。我最终使用apache的httpclient库而不是resttemplate。
下面是一些示例代码:
private List<OrganizationDTO> getUserOrgUnits(String loggedInUserId,String token) {
List<OrganizationDTO> userList = new ArrayList<OrganizationDTO>();
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet(getUserOrgUnitsApiURL());
try {
// Setting header
httpGet.setHeader("Authorization","Bearer " + token);
httpGet.setHeader("Content-type","application/json");
// Setting custom header
httpGet.setHeader(USERID_HEADER_NAME,loggedInUserId);
CloseableHttpResponse response = httpClient.execute(httpGet);
String result = EntityUtils.toString(response.getEntity());
JsonNode node = null;
ObjectMapper mapper = new ObjectMapper();
node = mapper.readTree(result);
Iterable<JsonNode> list = node.path("data");
for (JsonNode jsonNode : list) {
OrganizationDTO dto = mapper.treeToValue(jsonNode,OrganizationDTO.class);
userList.add(dto);
}
} catch (Exception e) {
log.error("getUserOrgUnits: Exception.");
e.printStackTrace();
}
return userList;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。