2015-12-30 15 views
5

Tôi có một ứng dụng RESTful dựa trên OAuth2 dựa trên bảo mật mùa xuân. Tôi đã cố gắng thay đổi các định dạng nhắn tin Spring Security mặc định từ XML thành JSON và đã thành công một phần trong việc làm như vậy.Bảo mật mùa xuân OAuth2 Thay đổi định dạng phản hồi lỗi JSON

Đối với ví dụ: - Tôi đã tìm ra cách để thay đổi định dạng phản ứng khi yêu cầu không chứa Bearer token (dòng sau làm nó)

<bean id="oauthAuthenticationEntryPoint" class ="c.s.m.security.CustomAuthenticationEntryPoint" /> 

Nhưng tôi không thể tìm ra cách để bắt/thay đổi định dạng của hai mục bên dưới.

  1. Khi mã thông báo không hợp lệ được chuyển vào URL bảo mật, Spring Security hiện đang phát lại. Tôi thay đổi định dạng này ở đâu?

    {"error": "invalid_token","error_description": "Invalid access token: 144285e3-9563-420e-8ce"} 
    
  2. Làm cách nào để thay đổi định dạng JSON BadCredentialsException? Hiện tại nó trả về một JSON tương tự như trên?

Dưới đây là applicationContext.xml tôi

<sec:http pattern="/oauth/token" create-session="stateless" 
    use-expressions="true" authentication-manager-ref="authenticationManager"> 
    <sec:csrf disabled="true" /> 
    <sec:anonymous enabled="false" /> 
    <sec:http-basic entry-point-ref="clientAuthenticationEntryPoint" /> 
    <sec:custom-filter ref="clientCredentialsTokenEndpointFilter" before="BASIC_AUTH_FILTER" /> 
    <sec:access-denied-handler ref="oauthAccessDeniedHandler" /> 
</sec:http> 
<sec:authentication-manager alias="authenticationManager" 
    erase-credentials="false"> 
    <sec:authentication-provider user-service-ref="clientDetailsUserService" /> 
</sec:authentication-manager> 

<bean id="clientDetailsUserService" class="org.springframework.security.oauth2.provider.client.ClientDetailsUserDetailsService"> 
    <constructor-arg ref="clientDetails" /> 
</bean> 

<!-- Entry point - Entry point Filter for token server --> 

<bean id="clientAuthenticationEntryPoint" class="org.springframework.security.oauth2.provider.error.OAuth2AuthenticationEntryPoint"> 
    <property name="realmName" value="Oauth 2 security" /> 
    <property name="typeName" value="Basic" /> 
</bean> 

<bean id="clientCredentialsTokenEndpointFilter" class="org.springframework.security.oauth2.provider.client.ClientCredentialsTokenEndpointFilter"> 
    <property name="authenticationManager" ref="authenticationManager" /> 
</bean> 

<!-- Oauth handler Access Denied Handler --> 

<bean id="oauthAccessDeniedHandler" class="c.s.m.security.CustomAccessDeniedHandler" /> 
    <!-- class="org.springframework.security.oauth2.provider.error.OAuth2AccessDeniedHandler" /> --> 

<!-- Server resource --> 

<sec:http pattern="/api/**" create-session="never" 
    entry-point-ref="oauthAuthenticationEntryPoint" use-expressions="true" > 
    <sec:csrf disabled="true" /> 
    <sec:anonymous enabled="false" /> 
    <sec:intercept-url pattern="/api/**" access="hasRole('ROLE_ADMIN')" /> 
    <sec:custom-filter ref="resourceServerFilter" 
     before="PRE_AUTH_FILTER" /> 
    <sec:access-denied-handler ref="oauthAccessDeniedHandler" /> 
</sec:http> 

<!-- Entry point resource --> 

<bean id="oauthAuthenticationEntryPoint" class ="c.s.m.security.CustomAuthenticationEntryPoint" />   

<oauth:resource-server id="resourceServerFilter" resource-id="springsec" token-services-ref="tokenServices" /> 

<bean id="tokenServices" 
    class="org.springframework.security.oauth2.provider.token.DefaultTokenServices" > 
    <property name="tokenStore" ref="tokenStore" /> 
    <property name="supportRefreshToken" value="true" /> 
    <property name="accessTokenValiditySeconds" value="300000" /> 
    <property name="clientDetailsService" ref="clientDetails" /> 
</bean>  
<bean id="tokenStore" class="org.springframework.security.oauth2.provider.token.store.JdbcTokenStore"> 
    <constructor-arg ref="dataSource" /> 
</bean> 
<oauth:authorization-server client-details-service-ref="clientDetails" token-services-ref="tokenServices"> 
    <oauth:authorization-code /> 
    <oauth:implicit /> 
    <oauth:refresh-token /> 
    <oauth:client-credentials /> 
    <oauth:password authentication-manager-ref="userAuthenticationManager" /> 
</oauth:authorization-server> 

<sec:authentication-manager id="userAuthenticationManager"> 
    <sec:authentication-provider ref="customUserDetailsService" /> 
</sec:authentication-manager> 

Trả lời

0

Gửi Accept: application/json trong tiêu đề yêu cầu sẽ giải quyết vấn đề.

Các vấn đề liên quan