千家信息网

Spring cloud中怎么利用zuul实现单点登录

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章将为大家详细讲解有关Spring cloud中怎么利用zuul实现单点登录,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.参考先检查有否认证
千家信息网最后更新 2026年11月04日Spring cloud中怎么利用zuul实现单点登录

这篇文章将为大家详细讲解有关Spring cloud中怎么利用zuul实现单点登录,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

1.参考

先检查有否认证的token,如果没有则抛出错误,再转到getRedirectForAuthorization,这下就转向了redirect的请求处理

1.ExceptionTranslationFilter

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)      throws IOException, ServletException {   HttpServletRequest request = (HttpServletRequest) req;   HttpServletResponse response = (HttpServletResponse) res;   try {      chain.doFilter(request, response);      logger.debug("Chain processed normally");   }   catch (IOException ex) {      throw ex;   }   catch (Exception ex) {      // Try to extract a SpringSecurityException from the stacktrace      Throwable[] causeChain = throwableAnalyzer.determineCauseChain(ex);      RuntimeException ase = (AuthenticationException) throwableAnalyzer            .getFirstThrowableOfType(AuthenticationException.class, causeChain);      if (ase == null) {         ase = (AccessDeniedException) throwableAnalyzer.getFirstThrowableOfType(               AccessDeniedException.class, causeChain);      }      if (ase != null) {         handleSpringSecurityException(request, response, chain, ase);      }

handleSpringSecurityException这块就将转向login

DelegatingAuthenticationEntryPoint

public void commence(HttpServletRequest request, HttpServletResponse response,      AuthenticationException authException) throws IOException, ServletException {

会计算到这个类上,LoginUrlAuthenticationEntryPoint,它将生成redirect

org.springframework.security.oauth3.client.token.grant.code.AuthorizationCodeAccessTokenProvider.obtainAccessToken(AuthorizationCodeAccessTokenProvider.java:205)

见下面的异步堆栈:

org.springframework.security.oauth3.client.resource.UserRedirectRequiredException: A redirect is required to get the users approval        at org.springframework.security.oauth3.client.token.grant.code.AuthorizationCodeAccessTokenProvider.getRedirectForAuthorization(AuthorizationCodeAccessTokenProvider.java:359)        at org.springframework.security.oauth3.client.token.grant.code.AuthorizationCodeAccessTokenProvider.obtainAccessToken(AuthorizationCodeAccessTokenProvider.java:205)        at org.springframework.security.oauth3.client.OAuth3RestTemplate.acquireAccessToken(OAuth3RestTemplate.java:221)        at org.springframework.security.oauth3.client.OAuth3RestTemplate.getAccessToken(OAuth3RestTemplate.java:173)        at org.springframework.security.oauth3.client.filter.OAuth3ClientAuthenticationProcessingFilter.attemptAuthentication(OAuth3ClientAuthenticationProcessingFilter.java:105)        at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212)        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)        at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:121)        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)        at shequ.cloud.server.zuul.security.SecurityConfiguration$2.doFilterInternal(SecurityConfiguration.java:91)        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)        at org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:100)        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)        at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:66)        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)        at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)        at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)        at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214)        at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177)        at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)        at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1676)        at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1676)        at org.springframework.security.oauth3.client.filter.OAuth3ClientContextFilter.doFilter(OAuth3ClientContextFilter.java:60)        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1676)        at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:89)        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1676)        at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1676)        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1676)        at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:107)        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1676)        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:581)        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)        at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)        at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180)        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511)        at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112)        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)        at org.eclipse.jetty.server.Server.handle(Server.java:524)        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:319)        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:253)        at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273)        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)        at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93)        at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303)        at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148)        at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136)        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671)        at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589)        at java.lang.Thread.run(Thread.java:745)

预过滤器:

0 = {ServletDetectionFilter@9816} ,确定是否支持Dispatch请求
1 = {Servlet30WrapperFilter@9817} ,进行Servlet30请求包装
2 = {FormBodyWrapperFilter@9818} ,FormBody包装
3 = {DebugFilter@9819}
4 = {PreDecorationFilter@9820}
5 = {AuthenticationHeaderFilter@9821} ,addIgnoredHeaders不知道是啥意思
6 = {OAuth3TokenRelayFilter@9441} ,这个被跳过了,不知道是否可以直接disable算了

ctx.addZuulRequestHeader("authorization", ctx.get(TOKEN_TYPE) + " " + getAccessToken(ctx));

正式过滤器:

0 = {RibbonRoutingFilter@9478}
1 = {SimpleHostRoutingFilter@9669}
2 = {SendForwardFilter@9692}

2.zuul中主要的类

2.1 ZuulController

public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {}

2.2 RibbonRoutingFilter

关于Spring cloud中怎么利用zuul实现单点登录就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

单点 登录 内容 文章 更多 知识 篇文章 过滤器 包装 参考 不错 会计 堆栈 意思 质量 错误 面的 处理 帮助 支持 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南京欣网互联网络科技 喔噻互联网科技有限公司 互联网最新的科技有限公司 互联网科技战争 期待互联网科技 银优互联网科技有限公司 时间互联网络科技 融贸通互联网科技 互联网科技有限公司 翻译 成都仁贤领冠互联网科技有限公司 赶超互联网科技 微信多开 苏州铭阳互联网科技有限公司 工业互联网展湾科技股份有限公司 无锡工业互联网科技有限公司 怎样加入科技互联网 产业互联网科技服务公司 有人说阿里系是互联网科技企业 中国互联网公司的科技投入 互联网的黑科技实验室 宁波允成互联网科技有限公司 互联网科技工作委员会主任 科技企业和互联网企业 互联网扶贫科技 互联网最新的科技有限公司 深圳科技互联网 天速互联网络科技有限公司 南山科技园互联网公司有哪些 威龙国际互联网科技公司 互联网相关科技技术 优雇互联网科技有限公司
0