내 Spring 3.1 및 RESTEasy 프로젝트에 OAuth 2.0을 구현하고 싶습니다. 프로젝트는 JSON 기반 REST 서비스입니다. 나는 스프링 보안 3.1과 스프링 - 보안 -auth2 버전 1.0.0.RC2 (최신 버전이어야한다)를 사용한다. 지금까지 기본 설정으로 봄 보안 설정이 있습니다. OAuth 2.0에 대한 기본 (기본) 구성도 있습니다.oauth2 제공자 엔드 포인트에 대한 핸들러 오류에 대한 어댑터가 없습니다.
나는 REST 서비스를 사용하기 전에 완벽하게 작동합니다. 스프링 보안 또한 잘 작동하는 것 같습니다. 내 REST 서비스에 대한 링크를 열면 로그인 페이지로 리디렉션됩니다. 로그인 한 후 예상 결과를 제공하는 REST 호출을 만들 수 있습니다. 내가 /oauth/token
에 액세스 할 때
나는 OAuth를 테스트하기 위해, HET는 localhost:8080/tools-service/oauth/token
또는 localhost:8080/tools-service/oauth/error
URL을 열
/oauth/error
에 대한 오류는 simular입니다. 내가 올바른 생각하면
HTTP Status 500 - No adapter for handler [public org.springframework.http.ResponseEntity org.springframework.security.oauth2.provider.endpoint.TokenEndpoint.getAccessToken(java.security.Principal,java.lang.String,java.util.Map)]: Does your handler implement a supported interface like Controller?
이는 TokenEndpoint.getAccessToken
기능에 오류가 있음을 의미? 이 클래스는 Spring 프레임 워크의 일부이기 때문에 실제로 문제는 그 클래스와 관련이 없다고 생각합니다. 날 우둔하게 만든다.
이제 이런 일이 발생하는 이유와 해결 방법을 알고 싶습니다. 브라우저에서 해당 URL을 방문하는 것이 허용되지 않는다고 생각했습니다. 그러나 내가 Sparklr2 (the Spring OAuth 2.0 sample application)로 같은 것을 시도하면 XML 메시지 (/ oauth2/토큰)와 오류 페이지 (/ oauth2/오류)가 예상대로 발생합니다.
도움이나 의견을 보내 주시면 감사하겠습니다. web.xml 파일에서
보안 관련 코드 조각 : 내 애플리케이션 컨텍스트는 내가 만든 다음 보안-config.xml 파일을로드
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
:
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:sec="http://www.springframework.org/schema/security"
xmlns:oauth="http://www.springframework.org/schema/security/oauth2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.1.xsd
http://www.springframework.org/schema/security/oauth2
http://www.springframework.org/schema/security/spring-security-oauth2.xsd">
<sec:http auto-config="true">
<sec:intercept-url pattern="/**" access="ROLE_USER" />
</sec:http>
<sec:authentication-manager>
<sec:authentication-provider>
<sec:user-service>
<sec:user name="user1" password="test123" authorities="ROLE_USER" />
<sec:user name="user2" password="hello123" authorities="ROLE_USER" />
</sec:user-service>
</sec:authentication-provider>
</sec:authentication-manager>
<sec:global-method-security pre-post-annotations="enabled" proxy-target-class="true">
<sec:expression-handler ref="oauthExpressionHandler" />
</sec:global-method-security>
<bean id="clientDetailsService" class="be.collectortools.rest.service.security.CollectorDetailsServiceImpl" />
<bean id="tokenStore" class="org.springframework.security.oauth2.provider.token.InMemoryTokenStore" />
<bean id="tokenServices" class="org.springframework.security.oauth2.provider.token.DefaultTokenServices">
<property name="tokenStore" ref="tokenStore" />
<property name="supportRefreshToken" value="true" />
<property name="clientDetailsService" ref="clientDetailsService"/>
</bean>
<oauth:authorization-server
client-details-service-ref="clientDetailsService"
token-services-ref="tokenServices">
<oauth:authorization-code />
<oauth:implicit />
<oauth:refresh-token />
<oauth:client-credentials />
<oauth:password />
</oauth:authorization-server>
<oauth:expression-handler id="oauthExpressionHandler" />
</beans>
CollectorClientDetails 구현은 더미입니다 코드 :
@Service
public class CollectorDetailsServiceImpl implements ClientDetailsService {
@Resource
private CollectorClientDetailsRepository collectorClientDetailsRepository;
@Override
public ClientDetails loadClientByClientId(final String clientId) throws OAuth2Exception {
CollectorClientDetails dummyClient = new CollectorClientDetails();
dummyClient.setClientId(clientId);
return dummyClient;
}
}
다른 사람들이 이와 같이 자신의 질문에 답변 해 주니 기쁩니다. 이것은 문제가 얼마나 모호 하든지 상관없이 적어도 한 명의 다른 사용자가 항상 같은 것을 경험하고 있다는 것을 보여주는 좋은 예입니다. 내가 당신에게 맥주를 사주고 싶지만 최소한 upvote를 가지고 있다면 :-) – Joe
Vertongen, 나는 관련된 모든 Google 결과를 읽었지만 문제 만 해결했다. 가 내 코드에서 누락되었습니다. 나 자신의 질문에 답하고 나를 도와 주셔서 감사합니다! –
szpetip
환영합니다. 나는이 모든 시간 이후 여전히 유용하다는 것이 행복하다. – Vertongen