2017-07-27 5 views
1

私のアプリの哲学はarticleから来ました。GWT + Springセキュリティで403エラーを取得

@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(); 
} 
} 

および使用コントローラー(私はそう願って)春のディスパッチャサーブレット(から)の符号化と復号化の要求のための「戦略」パターン:それによると、私はコンフィギュレーションクラスを作りました。

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(); 
} 
} 

だから私は( "/ノート")をマップするセキュリティコントローラを持っており、ローカルホストに(おかげでthymeleafに)それをレンダリング:8080/notes.htmlを。そして、ページが戻る。かっこいいね。しかし、私がブラウザでコンソールを開くと、次のエラーが表示されます。 POST http://localhost:8080/notes/notes/notes.rpc 403() このエラーはRPCサービスをgwtするための非同期要求をしませんでした。私のセキュリティ設定で

私はマッピングを追加しました:

 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() 

をしかし、エラーは行っておりません。だから質問は "なぜそれが?" 「私の」哲学はそれほどうまくいきませんか?

答えて

1

私はそれを解決しました。私がしなければならないことは、csrfを無効にすることだけでした。セキュリティによって、デフォルトで有効になります。

関連する問題