Я пытаюсь использовать подход, описанный здесь https://spring.io/guides/tutorials/spring-boot-oauth2/#_social_login_logout:
Поэтому у меня есть следующая базовая кодовая база:
@EnableAutoConfiguration
@Configuration
@EnableOAuth2Sso
@Controller
public class ClientApplication extends WebSecurityConfigurerAdapter {
private Logger logger = LoggerFactory.getLogger(ClientApplication.class);
@RequestMapping("/hello")
public String home(Principal user, HttpServletRequest request, HttpServletResponse response, Model model) throws ServletException {
model.addAttribute("name", user.getName());
return "hello";
}
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http.antMatcher("/**")
.authorizeRequests()
.antMatchers( "/login**", "/webjars/**", "/error**").permitAll()
.anyRequest()
.authenticated()
.and().logout().logoutSuccessUrl("/").permitAll()
.and()
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
// @formatter:on
}
public static void main(String[] args) {
new SpringApplicationBuilder(ClientApplication.class)
.properties("spring.config.name=application").run(args);
}
}
и следующий интерфейс:
js:
<script type="text/javascript">
$.ajaxSetup({
beforeSend: function (xhr, settings) {
if (settings.type == 'POST' || settings.type == 'PUT'
|| settings.type == 'DELETE') {
if (!(/^http:.*/.test(settings.url) || /^https:.*/
.test(settings.url))) {
// Only send the token to relative URLs i.e. locally.
xhr.setRequestHeader("X-XSRF-TOKEN",
Cookies.get('XSRF-TOKEN'));
}
}
}
});
var logout = function () {
$.post("/client/logout", function () {
$("#user").html('');
$(".unauthenticated").show();
$(".authenticated").hide();
});
return true;
};
$(function() {
$("#logoutButton").on("click", function () {
logout();
});
});
</script>
и html:
<input type="button" id="logoutButton" value="Logout"/>
Но это не работает.Поведение следующее:
После успешного входа в приложение я нажимаю кнопку выхода из системы. Она запускает перенаправления POST http://localhost:9999/client/logout
http://localhost:9999/client/logout
на http://localhost:9999/client
, но эта страница не существует.Затем я получаю доступ к localhost:8080/client/hello
- я вижу защищенную страницу
PS
/client
- это контекст приложения:
application.yml
фрагмент:
server:
servlet:
context-path: /client
исходный код на gitub:
клиент - https://github.com/gredwhite/logour_social-auth-client (используйте localhost:9999/client/hello
url)
сервер - https://github.com/gredwhite/logout_social-auth-server