api网关zuul 与 其他服务整合JWT(五)
上个章节已经做好了认证服务,但是调用服务是从先进入网关,再在网关路由到具体的服务的,现在添加了认证服务,所以在网关中需要一些配置才能让请求到达具体服务
进入mygateway,添加安全配置类
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
/**
* http安全配置
* @param http http安全对象
* @throws Exception http安全异常信息
*/
@Override
public void configure(HttpSecurity http) throws Exception {
http.csrf().disable(); // 禁用csrf
}
}
然后进入application.yml
#服务器配置
server:
#端口
port: 8080
#spring配置
spring:
#应用配置
application:
#名称: api网关服务
name: api-gateway
#服务器发现注册配置
eureka:
client:
serviceUrl:
#配置服务中心(可配置多个,用逗号隔开)
defaultZone: http://${
user.name}:${
user.password}@192.168.0.112:8761/eureka
zuul:
sensitive-headers: #Cookie,Set-Cookie
oauth2:
signature-verification:
public-key-endpoint-uri: http://myuaa/oauth/token_key
#ttl for public keys to verify JWT tokens (in ms)
ttl: 3600000
#max. rate at which public keys will be fetched (in ms)
public-key-refresh-rate-limit: 10000
web-client-configuration:
#keep in sync with UAA configuration
client-id: web_app
secret: changeit
# Controls session expiration due to inactivity (ignored for remember-me).
# Negative values disable session inactivity expiration.
session-timeout-in-seconds: 1800
user:
name: admin
password: admin_1
其中 zuul是网关配置,我们可以配置路由,规则,这些也可以使用默认的,重点讲sensitive-headers,zuul默认会屏蔽cookie,所以我们在请求头head的数据会被拦截,sensitive-headers配置就是设置网关拦截的,如果为空,代表关闭黑名单,所有的都会往下传,不为空,设置的才会往下传.像上面,我设的空,即是请求所有往下传,当然你们也可以设置cookie往下传,只需将 Cookie,Set-Cookie加上去,即代表cookie往下传,不会拦截认证信息
打开postmen
上面我用的网关走的请求,192.168.0.112:8080是网关,myuaa是认证服务的项目名
这里要说一下,由于我们用了JWT,拿到的token都是加密的,在myuaa上还好,去了其他的服务是需要解密的:
这里是有两种方案的:
1.所有的请求是在网关解密,在路由到具体服务
2.所有的解密是在资源服务器上,网关只是路由
我这里选择是在资源服务器上解密,减轻网关压力,将压力分发到不同的资源服务器上
进入app-producer-1,创建资源配置类ResourceConfiguration
ResourceConfiguration
@Configuration
@EnableResourceServer
//@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class ResourceConfiguration extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/api/**").authenticated()
.and()
.csrf()
.disable()
;
}
}
所有/api开头请求需要认证,
添加自定义配置依赖
<dependency>