我有一个使用Spring安全性进行身份验证的现有Web应用程序。它还使用会话管理来允许用户在预定义的时间段内登录,并使用XSRF令牌来防止XSS攻击。
@Override protected void configure(HttpSecurity http) throws Exception { // @formatter:off http .exceptionHandling() .authenticationEntryPoint(restEntryPoint()) .and() .headers().addHeaderWriter(new StaticHeadersWriter("Server","")) .and() .httpBasic() .authenticationEntryPoint(restEntryPoint()) .and() .logout().addLogoutHandler(myLogoutHandler()) .logoutSuccessHandler(logoutSuccessHandler()) .and() .authorizeRequests() .antMatchers("/index.html", "/login", "/").permitAll() .antMatchers(HttpMethod.OPTIONS).denyAll() .antMatchers(HttpMethod.HEAD).denyAll() .anyRequest().authenticated() .and() .authenticationProvider(myAuthenticationProvider) .csrf() .csrfTokenRepository(csrfTokenRepository()) .and() .addFilterAfter(csrfHeaderFilter(), SessionManagementFilter.class); // @formatter:on }
这对于Web应用程序非常有用。但是,现在要求我添加一个配置,该配置将允许第三方客户端应用程序通过纯REST调用来调用我的服务,即它们应该是完全无状态的,并且使用http基本身份验证-不应创建任何会话,并且应禁用xsrf(认为…)。
我可以为所有这些客户端API调用定义一个共享的URL路径。但是,如何利用现有的安全配置和服务器来支持这两个要求?