2017-07-27 6 views
1

Philosophie meiner App kam von dieser article. Nach ihm habe ich Konfiguration Klasse:Immer 403 Fehler mit GWT + Spring Security

@Configuration 
public class SpringForGwtConfig { 
@Bean 
public HandlerMapping simpleUrlHandlerMapping() { 
    SimpleUrlHandlerMapping simpleUrlHandlerMapping = new SimpleUrlHandlerMapping(); 
    Map<String, Controller> map = new HashMap<>(); 
    map.put("/notes/notes.rpc", notesGwtController()); 
    simpleUrlHandlerMapping.setUrlMap(map); 
    return simpleUrlHandlerMapping; 
} 

@Bean 
public ServletRegistrationBean gwtServlet() { 
    return new ServletRegistrationBean(notesGwtController(), "/notes/notes.rpc"); 
} 

@Bean 
public NotesGwtController notesGwtController() { 
    NotesGwtController notesGwtController = new NotesGwtController(); 
    notesGwtController.setRemoteService(notesService()); 
    return notesGwtController; 
} 

@Bean 
public NotesGwtService notesService() { 
    return new NotesGwtServiceImpl(); 
} 
} 

und der Controller die (hoffe, dass ich so) verwendet „Strategie“ Muster zur Codierung und Decodierung Anfragen an (von) Feder Dispatcher Servlet.

public class NotesGwtController extends RemoteServiceServlet implements Controller, ServletContextAware { 
private ServletContext servletContext; 
private RemoteService remoteService; 
private Class remoteServiceClass; 

@Override 
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { 
    super.doPost(request, response); 
    return null; 
} 

@Override 
public String processCall(String payload) throws SerializationException { 
    try { 
     RPCRequest rpcRequest = RPC.decodeRequest(payload, this.remoteServiceClass); 
     // delegate work to the spring injected service 
     return RPC.invokeAndEncodeResponse(this.remoteService, rpcRequest.getMethod(), rpcRequest.getParameters()); 

    } catch (IncompatibleRemoteServiceException exception) { 
     getServletContext() 
       .log(
         "An IncompatibleRemoteServiceException was thrown while processing this call.", 
         exception 
       ); 
     return RPC.encodeResponseForFailure(null, exception); 
    } 
} 

@Override 
public ServletContext getServletContext() { 
    return servletContext; 
} 

@Override 
public void setServletContext(ServletContext servletContext) { 
    this.servletContext = servletContext; 
} 

public void setRemoteService(RemoteService remoteService) { 
    this.remoteService = remoteService; 
    this.remoteServiceClass = this.remoteService.getClass(); 
} 
} 

So habe ich Sicherheits-Controller, die Karten ("/ note") und mache es (dank thymeleaf) auf localhost: 8080/notes.html. Und die Seite kehrt zurück. Es ist cool. Aber wenn ich Konsole im Browser öffne, enthält es diesen Fehler: POST http://localhost:8080/notes/notes/notes.rpc 403() Dieser Fehler lässt mich Async-Anfragen zu gwt RPC-Dienst nicht tun.

In meiner Sicherheitskonfiguration hinzugefügt I-Mapping:

 http 
      .authorizeRequests() 
      .antMatchers("/").access("hasRole('ROLE_USER') or hasRole('ROLE_ADMIN')") 
      .antMatchers("/api/**").access("hasRole('ROLE_ADMIN')") 
      .antMatchers("/notes").authenticated() 
      .antMatchers("/notes/notes.rpc").anonymous() 

Aber der Fehler nicht gegangen ist. Die Frage ist also: "Warum ist das so?" und "Kann" meine "Philosophie nicht so gut sein?"

Antwort

1

Ich löste es. Ich musste nur csrf deaktivieren. Sicherheit aktiviert standardmäßig

Verwandte Themen