Showcase Restful Service演示与Shiro集成的HttpBasic安全控制,RestTemplate设置HttpHeaders的写法。
This commit is contained in:
-21
@@ -1,21 +0,0 @@
|
||||
package org.springside.examples.showcase.webservice.rest;
|
||||
|
||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||
|
||||
public class SimpleTeamDTO {
|
||||
|
||||
private String name;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return ToStringBuilder.reflectionToString(this);
|
||||
}
|
||||
}
|
||||
+5
-5
@@ -11,7 +11,7 @@ public class UserDTO {
|
||||
private String loginName;
|
||||
private String name;
|
||||
private String email;
|
||||
private SimpleTeamDTO team;
|
||||
private Long teamId;
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
@@ -45,12 +45,12 @@ public class UserDTO {
|
||||
email = value;
|
||||
}
|
||||
|
||||
public SimpleTeamDTO getTeam() {
|
||||
return team;
|
||||
public Long getTeamId() {
|
||||
return teamId;
|
||||
}
|
||||
|
||||
public void setTeam(SimpleTeamDTO team) {
|
||||
this.team = team;
|
||||
public void setTeamId(Long teamId) {
|
||||
this.teamId = teamId;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+11
-5
@@ -19,16 +19,22 @@ public class UserRestController {
|
||||
|
||||
@RequestMapping(value = "/{id}.xml", method = RequestMethod.GET, produces = MediaType.APPLICATION_XML_VALUE)
|
||||
@ResponseBody
|
||||
public UserDTO getAs(@PathVariable("id") Long id) {
|
||||
public UserDTO getAsXml(@PathVariable("id") Long id) {
|
||||
User user = accountService.getUser(id);
|
||||
return BeanMapper.map(user, UserDTO.class);
|
||||
|
||||
return bindDTO(user);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/{id}.json", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
public UserDTO listasJson(@PathVariable("id") Long id) {
|
||||
public UserDTO getAsJson(@PathVariable("id") Long id) {
|
||||
User user = accountService.getUser(id);
|
||||
return BeanMapper.map(user, UserDTO.class);
|
||||
return bindDTO(user);
|
||||
}
|
||||
|
||||
private UserDTO bindDTO(User user) {
|
||||
UserDTO dto = BeanMapper.map(user, UserDTO.class);
|
||||
//补充Dozer不能自动绑定的属性
|
||||
dto.setTeamId(user.getTeam().getId());
|
||||
return dto;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
/login = authc
|
||||
/logout = logout
|
||||
/account/** = user
|
||||
/rest/users = authcBasic
|
||||
/api/** = authcBasic
|
||||
</value>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
@@ -12,12 +12,19 @@
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>Web Service 演示</h1>
|
||||
<h1>Web Service 演示</h1>
|
||||
|
||||
<h2>传统SOAP Web Service演示</h2>
|
||||
<ul>
|
||||
<li>服务端是基于CXF的JAX-WS演示. 详见由CXF自动生成的<a href="${ctx}/soap">服务信息及wsdl文件</a>.</li>
|
||||
<li>客户端见Functional Test用例.</li>
|
||||
</ul>
|
||||
<h2>传统SOAP Web Service演示</h2>
|
||||
<ul>
|
||||
<li>服务端是基于CXF的JAX-WS演示. 详见由CXF自动生成的<a href="${ctx}/soap">服务信息及wsdl文件</a>.</li>
|
||||
<li>客户端见Functional Test用例.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Restful Service高级演示</h2>
|
||||
<ul>
|
||||
<li>集成Shiro进行HttpBasic的认证</li>
|
||||
<li>XML与JSON两种格式</li>
|
||||
<li>RestTemplate设置HttpHeaders的写法</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
+42
-4
@@ -4,9 +4,15 @@ import static org.junit.Assert.*;
|
||||
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
import org.springframework.http.HttpEntity;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.web.client.HttpClientErrorException;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
import org.springside.examples.showcase.functional.BaseFunctionalTestCase;
|
||||
import org.springside.examples.showcase.webservice.rest.UserDTO;
|
||||
import org.springside.modules.web.Servlets;
|
||||
|
||||
public class UserRestFT extends BaseFunctionalTestCase {
|
||||
|
||||
@@ -19,14 +25,46 @@ public class UserRestFT extends BaseFunctionalTestCase {
|
||||
resoureUrl = baseUrl + "/api/v1/user";
|
||||
}
|
||||
|
||||
/**
|
||||
* 演示restTemplate中如何设置Headers.
|
||||
* 演示json与xml格式数据.
|
||||
*/
|
||||
@Test
|
||||
public void getUser() {
|
||||
//设置Http Basic参数
|
||||
HttpHeaders requestHeaders = new HttpHeaders();
|
||||
requestHeaders.set(com.google.common.net.HttpHeaders.AUTHORIZATION, Servlets.encodeHttpBasic("admin", "admin"));
|
||||
HttpEntity<?> requestEntity = new HttpEntity(requestHeaders);
|
||||
|
||||
//as xml
|
||||
UserDTO user = restTemplate.getForObject(resoureUrl + "/{id}.xml", UserDTO.class, 1L);
|
||||
assertEquals("admin", user.getLoginName());
|
||||
HttpEntity<UserDTO> response = restTemplate.exchange(resoureUrl + "/{id}.xml", HttpMethod.GET, requestEntity,
|
||||
UserDTO.class, 1L);
|
||||
assertEquals("admin", response.getBody().getLoginName());
|
||||
assertEquals(new Long(1), response.getBody().getTeamId());
|
||||
|
||||
//as json
|
||||
user = restTemplate.getForObject(resoureUrl + "/{id}.json", UserDTO.class, 1L);
|
||||
assertEquals("admin", user.getLoginName());
|
||||
response = restTemplate.exchange(resoureUrl + "/{id}.json", HttpMethod.GET, requestEntity, UserDTO.class, 1L);
|
||||
assertEquals("admin", response.getBody().getLoginName());
|
||||
assertEquals(new Long(1), response.getBody().getTeamId());
|
||||
}
|
||||
|
||||
/**
|
||||
* 演示restTemplate中如何设置Headers.
|
||||
* 演示json与xml格式数据.
|
||||
*/
|
||||
@Test
|
||||
public void authWithHttpBasic() {
|
||||
//设置Http Basic参数
|
||||
HttpHeaders requestHeaders = new HttpHeaders();
|
||||
requestHeaders.set(com.google.common.net.HttpHeaders.AUTHORIZATION,
|
||||
Servlets.encodeHttpBasic("admin", "wrongpassword"));
|
||||
HttpEntity<?> requestEntity = new HttpEntity(requestHeaders);
|
||||
|
||||
try {
|
||||
restTemplate.exchange(resoureUrl + "/{id}.xml", HttpMethod.GET, requestEntity, UserDTO.class, 1L);
|
||||
fail("Get should fail with error username/password");
|
||||
} catch (HttpClientErrorException e) {
|
||||
assertEquals(HttpStatus.UNAUTHORIZED, e.getStatusCode());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user