不清楚Oauth2.0 的 可以查看我前几篇博文

2018.4.8 补充 我出现这个原因:是我在资源服务器使用了 如下图所示

Oauth2.0 整合springCloud的Zuul 解决关键BUG 报错信息:Principal must not be null-LMLPHP

Principal Oauth2.0 提供的获取用户信息的方法 使其找到相关信息

配置Oauth2.0 认证服务端的时候UserDetails 配置的时候 继承的实体类

aaarticlea/png;base64,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" alt="" />

User 代码上 经个人测试必须要有这几个实体类 这里面的信息是Principal 方法里所用到的信息 必须有的 如果没有会报错:Principal must not be null

public class User extends SupplyUser {
private String firstName;
private String lastName;
private String email;
private String imageUrl;
private Instant createTime;
@JsonIgnore
private Instant updateTime;
@JsonIgnore
private Set<Role> roles = new HashSet<>();
private Set<GrantedAuthority> authorities = new HashSet<>(); public Set<GrantedAuthority> getAuthorities() {
Set<GrantedAuthority> authorities = new HashSet<>();
for (Role role : this.roles) {
for (Authority authority : role.getAuthorities()) {
authorities.add(new SimpleGrantedAuthority(authority.getValue()));
}
}
return authorities;
}

以上方法都不缺的话 只能使用以下的方法了,但笔者不建议使用删除包的方法

Zuul 为springCloud 微服务框架 单独可以使用 非常简单 可以上网查证

此文只说明如何解决Oauth2.0 和Zuul 包 的冲突

需求:新建一个Oauth2.0 项目 需要在此基础上进行网关分发 选用的框架为Zuul

遇到的问题 是 一旦导入zuul 的所需包

  <dependency>
<groupId>org.springframework.cloud</groupId> ------ 》》 冲突
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Dalston.SR3</spring-cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

运行之后 请求分发接口 就报错信息

java.lang.IllegalArgumentException: Principal must not be null
at org.springframework.util.Assert.notNull(Assert.java:134) ~[spring-core-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.boot.actuate.audit.AuditEvent.<init>(AuditEvent.java:88) ~[spring-boot-actuator-1.5.4.RELEASE.jar:1.5.4.RELEASE]
at org.springframework.boot.actuate.audit.AuditEvent.<init>(AuditEvent.java:64) ~[spring-boot-actuator-1.5.4.RELEASE.jar:1.5.4.RELEASE]
at org.springframework.boot.actuate.security.AuthenticationAuditListener.onAuthenticationSuccessEvent(AuthenticationAuditListener.java:92) ~[spring-boot-actuator-1.5.4.RELEASE.jar:1.5.4.RELEASE]
at org.springframework.boot.actuate.security.AuthenticationAuditListener.onApplicationEvent(AuthenticationAuditListener.java:72) ~[spring-boot-actuator-1.5.4.RELEASE.jar:1.5.4.RELEASE]
at org.springframework.boot.actuate.security.AuthenticationAuditListener.onApplicationEvent(AuthenticationAuditListener.java:35) ~[spring-boot-actuator-1.5.4.RELEASE.jar:1.5.4.RELEASE]
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:167) ~[spring-context-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) ~[spring-context-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:393) ~[spring-context-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:347) ~[spring-context-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.security.authentication.DefaultAuthenticationEventPublisher.publishAuthenticationSuccess(DefaultAuthenticationEventPublisher.java:99) ~[spring-security-core-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationProcessingFilter.doFilter(OAuth2AuthenticationProcessingFilter.java:156) ~[spring-security-oauth2-2.0.14.RELEASE.jar:na]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) ~[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116) ~[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) ~[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64) ~[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) ~[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) ~[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) ~[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56) ~[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) ~[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214) ~[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177) ~[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) ~[spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) ~[spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.15.jar:8.5.15]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.15.jar:8.5.15]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.15.jar:8.5.15]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.15.jar:8.5.15]
at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:105) ~[spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.15.jar:8.5.15]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.15.jar:8.5.15]
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81) ~[spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.15.jar:8.5.15]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.15.jar:8.5.15]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) ~[spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.15.jar:8.5.15]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.15.jar:8.5.15]
at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:106) ~[spring-boot-actuator-1.5.4.RELEASE.jar:1.5.4.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.15.jar:8.5.15]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.15.jar:8.5.15]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) ~[tomcat-embed-core-8.5.15.jar:8.5.15]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-8.5.15.jar:8.5.15]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478) [tomcat-embed-core-8.5.15.jar:8.5.15]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) [tomcat-embed-core-8.5.15.jar:8.5.15]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80) [tomcat-embed-core-8.5.15.jar:8.5.15]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [tomcat-embed-core-8.5.15.jar:8.5.15]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) [tomcat-embed-core-8.5.15.jar:8.5.15]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799) [tomcat-embed-core-8.5.15.jar:8.5.15]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.15.jar:8.5.15]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861) [tomcat-embed-core-8.5.15.jar:8.5.15]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455) [tomcat-embed-core-8.5.15.jar:8.5.15]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.15.jar:8.5.15]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_91]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_91]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.15.jar:8.5.15]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_91]

原因 是 一片老外的博文  给出了解决办法及原因 限于英语有限 大家可以自己查看一下 1.地址:https://github.com/spring-projects/spring-boot/issues/6447  2. https://stackoverflow.com/questions/38958004/spring-boot-1-4-principal-must-not-be-null-exception

翻译过来大体是:

当你同时拥有Spring Boot Actuator和Spring Security时,

试图使用SecurityContextHolder.getContext().getAuthentication()(或@AuthenticationPrincipal在方法签名中使用)的基于UriTemplate的路由将获得一个null值。

也就是说Oauth2.0 导入的包和Zuul导入的包下的子包spring-boot-actuator (注意这个包并没有在ZUUL pom中包 中所体现)同时调用 发生冲突 将这个包移除问题就能解决了

具体解决方法 1.:在zuul 下 添加如下exclusions 标签移除 即可

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-actuator</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>

第二种解决办法 是开始的时候并不知到spring-boot-actuator 为zuul 下的包, 那如何找到他  我使用的springboot +maven 框架 工具是IDEA

点击右边栏Maven Projects--》show Dependence

Oauth2.0 整合springCloud的Zuul 解决关键BUG 报错信息:Principal must not be null-LMLPHP

变成如下界面 可以看出spring-boot-actuator   属于springZuul 下的子包

Oauth2.0 整合springCloud的Zuul 解决关键BUG 报错信息:Principal must not be null-LMLPHP

找到spring-boot-actuator  右键删除 在点击右下角的Import

Oauth2.0 整合springCloud的Zuul 解决关键BUG 报错信息:Principal must not be null-LMLPHP

删除后 pom中依然是这样

 <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-actuator</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions> </dependency>

补充  :  以上这种方法不够科学  后期可能会带来许多麻烦

我最近 将  ZUUL及EUREKA 注册  和OAUTH2.0  分开三个小项目  写 可以避免 许多麻烦  也增加代码  的规范化

还有就是spring-cloud  已经提供 OAuth2.0 的包 也可以避免 相互冲突

    <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-oauth2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-security</artifactId>
</dependency>

后期我会写个 规范 springCloud 和Oauth2.0 整合 及Oauth2.0 资源服务器配置  代码DEMO

05-11 13:15