Я пытаюсь создать базовую службу REST, защищенную Spring Security, с аутентификацией и авторизацией OAuth 2.0.Внедрение Spring Security Oauth без конфигурации XML
Я пытаюсь ограничить задействованные элементы, вместо того, чтобы копировать в XML-конфигурацию Spring Security Oath XML, основанную на Spring Beans, Spring MVC и т. Д. Я напрямую использую классы Oauth Spring Security.
Я попал в ловушку при попытке получить токен доступа из/oauth/token. Я, вероятно, пропустил что-то основное, но и Spring Security, и Spring Security Oauth сложно оборачивать вокруг себя, и я не могу найти ни одного примера или учебника, который не требует использования дополнительных фреймворков.
Может ли кто-нибудь увидеть, где я ошибаюсь?
RestService.java
@Path("/members")
public class RestService {
@Secured({"ROLE_USER"})
@GET
@Path("/{id}")
@Produces(MediaType.TEXT_PLAIN)
public Response readMember(@PathParam("id") String id) {
String output;
if(Integer.valueOf(id) < members.size())
{
output = members.get(Integer.valueOf(id)).toString();
}
else
{
output = "No such member.";
}
return Response.status(200).entity(output).build();
}
}
OAuthServices.java
public class OAuthServices {
static private DefaultTokenServices tokenServices = new DefaultTokenServices();
static private InMemoryClientDetailsService clientDetailsService = new InMemoryClientDetailsService();
static {
Map<String, ClientDetails> clientDetailsStore = new HashMap<String, ClientDetails>();
BaseClientDetails clientDetails = new BaseClientDetails("client", "resource", null, null, "read,write");
clientDetailsStore.put("client", clientDetails);
clientDetailsService.setClientDetailsStore(clientDetailsStore);
}
public static DefaultTokenServices getTokenServices() {
return tokenServices;
}
public static InMemoryClientDetailsService getClientDetailsService() {
return clientDetailsService;
}
}
SecurityConfig.java
@EnableAuthorizationServer
@EnableWebSecurity
@Configuration
@EnableGlobalMethodSecurity(securedEnabled=true)
public class SecurityConfig extends WebSecurityConfigurerAdapter implements AuthorizationServerConfigurer {
@Configuration
protected static class AuthenticationConfiguration extends
GlobalAuthenticationConfigurerAdapter {
@Override
public void init(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER")
.and()
.withUser("admin").password("password").roles("USER", "ADMIN");
}
}
@Override
public void configure(AuthorizationServerSecurityConfigurer security)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public void configure(ClientDetailsServiceConfigurer clients)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints)
throws Exception {
// TODO Auto-generated method stub
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<servlet-name>jersey-helloworld-servlet</servlet-name>
<servlet-class>
org.glassfish.jersey.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.excentus.springsecurity.rest.test</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-helloworld-servlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
Это очень много кода, чтобы ожидать, что люди просмотрят. Я предлагаю более кратко изложить вашу проблему, если это возможно. –
Я думал, что было бы полезно иметь его там, чтобы ссылаться при необходимости, хотя большая часть его не должна быть релевантной. Я могу сократить его, хотя если это нахмурилось. –