SpringCloud实战(5)SpringSecurity消费端访问
1、 在实际开发中,对于Rest服务提供者是不能被用户直接访问的,于是肯定需要有一个Rest客户端(Web端,springboot),进行调用,可是Rest提供者的服务上了有了认证信息,那么该如何访问呢? 如果这个时候在Rest客户端上直接使用用户名和密码做加密处理,那么根本就无法进行访问,此时会出现有401的错误代码,因为认证出现了错误。之所以无法访问,是因为所有的认证处理操作应该以头信息的模式来进行处理。而后我们要使用Base64进行加密处理后才可以得到一个正确的访问路径。
2、提供者进行了SpringSecurity安全处理,消费端直接访问会出现认证错误。


5、【microcloud-consumer-80】修改ConsumerDeptController配置类,在进行Rest访问的时候设置好这个头部的信息。@RestControllerpublic class ConsumerDeptController { public static final String DEPT_GET_URL = "http://dept-8001.com:8001/dept/get/"; public static final String DEPT_LIST_URL = "http://dept-8001.com:8001/dept/list/"; public static final String DEPT_ADD_URL = "http://dept-8001.com:8001/dept/add"; @Resource private RestTemplate restTemplate; @Resource private HttpHeaders httpHeaders; @RequestMapping(value = "/consumer/dept/get",method = RequestMethod.GET) public Object getDept(long id) { //Dept dept = this.restTemplate.getForObject(DEPT_GET_URL + id,Dept.class); Dept dept = this.restTemplate.exchange(DEPT_GET_URL + id, HttpMethod.GET, new HttpEntity<Object>(this.httpHeaders),Dept.class).getBody(); return dept; } @RequestMapping(value = "/consumer/dept/list") public Object listDept() { List<Dept> allDepts = this.restTemplate.getForObject(DEPT_LIST_URL,List.class); return allDepts; } @RequestMapping(value = "/consumer/dept/add") public Object addDept(Dept dept) { return this.restTemplate.postForObject(DEPT_ADD_URL,dept,Boolean.class); }}
6、访问:http://client.com/consumer/dept/get?id=1

8、【microcloud-consumer-80】修改ConsumerDeptController配置类,在进行Rest访问的时候设置好add方法这个头部的信息。package com.gwolf.microcloud.controller;import com.gwolf.vo.Dept;import org.springframework.http.HttpEntity;import org.springframework.http.HttpHeaders;import org.springframework.http.HttpMethod;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.client.RestTemplate;import javax.annotation.Resource;import java.util.List;@RestControllerpublic class ConsumerDeptController { public static final String DEPT_GET_URL = "http://dept-8001.com:8001/dept/get/"; public static final String DEPT_LIST_URL = "http://dept-8001.com:8001/dept/list/"; public static final String DEPT_ADD_URL = "http://dept-8001.com:8001/dept/add"; @Resource private RestTemplate restTemplate; @Resource private HttpHeaders httpHeaders; @RequestMapping(value = "/consumer/dept/get",method = RequestMethod.GET) public Object getDept(long id) { //Dept dept = this.restTemplate.getForObject(DEPT_GET_URL + id,Dept.class); Dept dept = this.restTemplate.exchange(DEPT_GET_URL + id, HttpMethod.GET, new HttpEntity<Object>(this.httpHeaders),Dept.class).getBody(); return dept; } @RequestMapping(value = "/consumer/dept/list") public Object listDept() { //List<Dept> allDepts = this.restTemplate.getForObject(DEPT_LIST_URL,List.class); List<Dept> allDepts = this.restTemplate.exchange(DEPT_LIST_URL,HttpMethod.GET, new HttpEntity<Object>(this.httpHeaders),List.class).getBody(); return allDepts; } @RequestMapping(value = "/consumer/dept/add") public Object addDept(Dept dept) { return this.restTemplate.exchange(DEPT_ADD_URL,HttpMethod.POST, new HttpEntity<Object>(dept,this.httpHeaders),Boolean.class).getBody(); }}

9、对于Rest而言,实际上里面如果要进行参数的传递有各种方式,例如:各种页面的路径信息组成。如果要传递负责内容,建议你在整个处理的时候就去使用那些页面的参数传递的模式。