2016-10-19 21 views
1

私はSpring Oauth2にもう一度問題があります。私はあまりにも多くの設定があるので、この話題はsthを示唆したり、コードをチェックすることは容易ではないことを知っています。 私のプロジェクトには、認証サーバー、リソースサーバー、およびフロントエンドサーバーという3つの異なるサーバーがあります。 register.htmlをフロントエンドプロジェクト(Angularjsファイル)のユーザー登録に入れたいのですが、関連URL(http://localhost:7080/app/#register)にリクエストをしてログインページ(http://localhost:9080/auth-service/login)にリダイレクトすると、登録が表示されます.htmlの内容がその後にログインページに行く。 質問は、私はこのregister.htmlをどこに置くべきですか?それはフロントエンドプロジェクトまたは認証サーバーの下にあるべきですか?Spring Oauth2 + User Registration

認証サーバーとフロントエンドサーバーのコードは次のとおりです。 または多分:

@Configuration 
    public class AuthServerSecurityConfiguration extends WebSecurityConfigurerAdapter { 

@Autowired 
private AuthenticationManager authenticationManager; 


@Override 
protected void configure(AuthenticationManagerBuilder auth) 
     throws Exception { 
    auth.parentAuthenticationManager(authenticationManager); 
    auth.authenticationProvider(userAuthProviderService()); 
} 
private CsrfMatcher csrfRequestMatcher = new CsrfMatcher(); 
@Override 
protected void configure(final HttpSecurity http) throws Exception { 
    /*http.csrf().disable();*/ 
    http.csrf().requireCsrfProtectionMatcher(csrfRequestMatcher); 
    http 
      .formLogin().loginPage("/login").defaultSuccessUrl("/") 
      /*.failureUrl("")*/.successHandler(new AuthSuccessHandler()).permitAll() 
      .and() 
      .requestMatchers().antMatchers("/login", "/oauth/authorize", "/oauth/confirm_access","/register") 
      .and() 
      .authorizeRequests().anyRequest().authenticated(); 

} 

@Bean 
public UserAuthProviderService userAuthProviderService(){ 
    return new UserAuthProviderService(); 
} 

private class CsrfMatcher implements RequestMatcher { 
    @Override 
    public boolean matches(HttpServletRequest request) { 
     return false; 
    } 
} 

}

@Configuration 
@EnableAutoConfiguration 
@RestController 
@EnableZuulProxy 
@EnableOAuth2Sso 
@EnableOAuth2Client 
public class UIServiceMain { 

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

@Configuration 
protected static class SecurityConfiguration extends OAuth2SsoConfigurerAdapter { 

    @Override 
    public void configure(HttpSecurity http) throws Exception { 
     http.logout().and() 
       .antMatcher("/**").authorizeRequests() 
       .antMatchers("/index.html", "/home.html", "/", "/login","/register.html").permitAll().anyRequest() 
       .authenticated().and().csrf().disable(); 
     http.headers().frameOptions().disable(); //FOR EMBED MAP 
    } 

    //unused 
    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 = WebUtils.getCookie(request, "XSRF-TOKEN"); 
        String token = csrf.getToken(); 
        if (cookie == null || token != null 
          && !token.equals(cookie.getValue())) { 
         cookie = new Cookie("XSRF-TOKEN", token); 
         cookie.setPath("/"); 
         response.addCookie(cookie); 
        } 
       } 
       filterChain.doFilter(request, response); 
      } 
     }; 
    } 

    //unused 
    private CsrfTokenRepository csrfTokenRepository() { 
     HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository(); 
     repository.setHeaderName("X-XSRF-TOKEN"); 
     return repository; 
    } 
} 

}あなたのUIサーバーで

答えて

0

は、/register.hmlを有効にしてWebSecurity社を作成するには、この

@Configuration 
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter{ 

     @Override 
     protected void configure(HttpSecurity http) throws Exception { 
      http 
        .requestMatchers() 
        .antMatchers("/register.html") 
        .and() 
        .authorizeRequests() 
        .anyRequest().authenticated(); 
     } 
} 

編集のようなものを試してみてください現在の設定で.antMatcher("/**").authorizeRequests()を削除し、を追加します物事の

@Override 
public void configure(HttpSecurity http) throws Exception { 
     http.logout().and() 
       .antMatchers("/index.html", "/home.html", "/", "/login","/register.html").permitAll().anyRequest() 
       .authenticated() 
       .and().csrf().disable(); 
     http.headers().frameOptions().disable() //FOR EMBED MAP 
       .and() 
       .authorizeRequests() 
       .anyRequest().authenticated(); 

    } 
0

カップル:

  • は、私はどこか他のあなたの*の.htmlのを入れていない十分な理由を考えることができない

    ので、最終的にはこのようなものかもしれませんフロントエンドサーバーより

  • @bilakが述べたように。また、一般的に、あなたは、公にあなたの静的なUIコンポーネントへのアクセスを許可する必要があります

.antMatchers("/index.html", "/home.html", "/", "/login","/register.html").permitAll()

  • あなたがでregister.htmlページを参照してくださいすることができるならばすべて(認証されていないユーザーと仮定した場合)、公開済みです。

  • おそらく、0のWebサービス呼び出しがありますのロードイベントは、認証フローをトリガーするSpringセキュリティの背後にあります。