【发布时间】:2019-10-14 03:55:41
【问题描述】:
我有 3 个应用程序,一个用于授权,一个带有资源(api rest),一个在 thymeleaf 中的客户端消耗其余部分。
当我注销客户端时,这似乎不是真正的注销,因为当我点击登录时,直接登录我...使用以前的用户。
我以 Baeldung 为例,他和我的相似,也有同样的问题。
授权服务器 https://github.com/Baeldung/spring-security-oauth/tree/master/oauth-authorization-server
资源服务器 https://github.com/Baeldung/spring-security-oauth/tree/master/oauth-resource-server-1
Thymeleaf 客户端 https://github.com/Baeldung/spring-security-oauth/tree/master/clients-thymeleaf/oauth-ui-authorization-code-thymeleaf
在我拥有的授权服务器中
@Controller
public class TokenController {
@Resource(name = "tokenServices")
private ConsumerTokenServices tokenServices;
@Resource(name = "tokenStore")
private TokenStore tokenStore;
@RequestMapping(method = RequestMethod.POST, value = "/oauth/token/revokeById/{tokenId}")
@ResponseBody
public void revokeToken(HttpServletRequest request, @PathVariable String tokenId) {
tokenServices.revokeToken(tokenId);
}
@RequestMapping(method = RequestMethod.GET, value = "/tokens")
@ResponseBody
public List<String> getTokens() {
Collection<OAuth2AccessToken> tokens = tokenStore.findTokensByClientId("sampleClientId");
return Optional.ofNullable(tokens).orElse(Collections.emptyList()).stream().map(OAuth2AccessToken::getValue).collect(Collectors.toList());
}
@RequestMapping(method = RequestMethod.POST, value = "/tokens/revokeRefreshToken/{tokenId:.*}")
@ResponseBody
public String revokeRefreshToken(@PathVariable String tokenId) {
if (tokenStore instanceof JdbcTokenStore) {
((JdbcTokenStore) tokenStore).removeRefreshToken(tokenId);
}
return tokenId;
}
}
在百里香客户端我有
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/").permitAll()
.anyRequest().authenticated()
.and()
.oauth2Login()
.and()
.logout().logoutSuccessUrl("/");
}
@Bean
public RestTemplate restTemplate(OAuth2AuthorizedClientService clientService) {
RestTemplate restTemplate = new RestTemplate();
List<ClientHttpRequestInterceptor> interceptors = restTemplate.getInterceptors();
if (CollectionUtils.isEmpty(interceptors)) {
interceptors = new ArrayList<>();
}
interceptors.add(new AuthorizationHeaderInterceptor(clientService));
restTemplate.setInterceptors(interceptors);
return restTemplate;
}
}
如何真正退出thymeleaf(token一定要去掉?)
【问题讨论】:
-
应该是其余的API。安全性旨在保护您的 API 提供的资源。
标签: spring-boot spring-security thymeleaf resttemplate spring-oauth2