Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring Cloud单点登录,但仅限于已登录的情况_Spring_Spring Security_Spring Boot_Spring Security Oauth2_Spring Cloud - Fatal编程技术网

Spring Cloud单点登录,但仅限于已登录的情况

Spring Cloud单点登录,但仅限于已登录的情况,spring,spring-security,spring-boot,spring-security-oauth2,spring-cloud,Spring,Spring Security,Spring Boot,Spring Security Oauth2,Spring Cloud,我已经安装了一个SpringCloudOAuth2服务器,并使用jwt和一个配置如下的客户端运行 @EnableOAuth2Sso public class PortalApplication { public static void main(String[] args) { SpringApplication.run(PortalApplication.class, args); } @Component public static cla

我已经安装了一个SpringCloudOAuth2服务器,并使用jwt和一个配置如下的客户端运行

@EnableOAuth2Sso
public class PortalApplication {

    public static void main(String[] args) {
        SpringApplication.run(PortalApplication.class, args);
    }

    @Component
    public static class LoginConfigurer extends OAuth2SsoConfigurerAdapter {

        @Override
        public void match(RequestMatchers matchers) {
            matchers.antMatchers("/**");
        }

        @Override
        public void configure(HttpSecurity http) throws Exception {
            http
                .authorizeRequests()
                    .anyRequest()
                    .authenticated()
                .and()
                .csrf()
                    .csrfTokenRepository(csrfTokenRepository())
                .and()
                .addFilterAfter(csrfHeaderFilter(), CsrfFilter.class);
        }

        private Filter csrfHeaderFilter() {
            return new OncePerRequestFilter() {
                @Override
                protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
                    CsrfToken csrf = (CsrfToken) request.getAttribute(CsrfToken.class.getName());
                    if (csrf != null) {
                        Cookie cookie = new Cookie("XSRF-TOKEN", csrf.getToken());
                        cookie.setPath("/");
                        response.addCookie(cookie);
                    }
                    filterChain.doFilter(request, response);
                }
            };
        }

        private CsrfTokenRepository csrfTokenRepository() {
            HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
            repository.setHeaderName("X-XSRF-TOKEN");
            return repository;
        }
    }
}
这一切正常,应用程序重定向到身份验证服务器,完成后重定向回门户应用程序

二号客户 但现在我有另一个客户,那是一家网上商店

如果用户在auth服务器上登录,则网络商店应在顶部显示一个栏,其中包含指向用户以前订单的链接和配置文件

如果用户未登录,则在签出步骤之前不会发生任何事情,在此步骤中,用户必须登录或创建帐户

问题: 如果我已经登录到身份验证服务器,但允许匿名用户登录,如何自动登录


我可以用spring.oauth2.resource.userInfoUri来实现这一点吗?

这难道不是一个正常的“如果经过身份验证,则显示这个,否则显示那个”用例吗?您不必为每个请求对用户进行身份验证(您的ant matcher是/**)。如果我登录到account.mydomain.com,oauthserver所在的位置。如果我访问www.mydomain.com,我希望看到我已登录。但它不应该强迫用户登录,因为它是一个公共站点。我不知道舒尔如何配置它。如何让www.mydomain.com检查身份验证服务器以查看我是否已登录?除非您控制两个域,否则无法在后台通道中执行此操作-否则您必须使用浏览器并让用户参与此过程。如果您同时控制这两个域,则可以向“auth”域添加CORS筛选器,允许浏览器从“www”域询问当前已验证用户的相关信息。如果您知道他已通过身份验证,那么您可以安全地将浏览器重定向到“www”上的a/login端点,并获得该域的cookie,而无需进一步身份验证。