2013-07-10 1 views
0

Позвольте мне объяснить мою ситуацию, я разработал полный бэкэнд для Android-приложения в Symfony2.1, который отлично работает, теперь я пытаюсь создать часть приложения для Android, для этого я создал брандмауэр с http_basic аутентификация, которая гарантирует, что мои пользователи будут правильно аутентифицированы и авторизованы, я действительно могу использовать свое приложение и регистрироваться, но если я попытаюсь получить любую страницу за брандмауэром, получите ошибку 404.Проблема с брандмауэром Symfony2 Android

Я не хочу использовать какой-либо внешний пакет, я просто хочу отправить свой пользователь/пароль по каждому запросу, так как мое приложение выполняет только три вызова httpclient, но я не знаю, как получить доступ к каждому запросу.

Вот часть моего кода, не стесняйтесь спрашивать :) Заранее спасибо!

Мой Android вызов HTTP:

@Override protected String doInBackground(Void... arg0) { 

     HttpClient httpClient = new DefaultHttpClient(); 

     // construir peticion get 
     HttpGet httpGet = new HttpGet("http://www.somewebsite.com/api/login/"); 

     httpGet.addHeader(BasicScheme.authenticate(
       new UsernamePasswordCredentials(loguser, passw), "UTF-8", 
       false)); 

     try { 
      response = httpClient.execute(httpGet); 

      reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8")); 
      builder = new StringBuilder(); 
      for(String line = null; (line = reader.readLine()) != null;){ 
       builder.append(line).append("\n"); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
      alert("Error de protocolo", "Lo sentimos, ha ocurrido un error"); 
     } 

     return builder.toString(); 
    } 

Мой брандмауэр

api: 
     pattern: ^/api/.* 
     provider: app_user 
     http_basic: 
      realm: "API" 

access_control: 
    - { path: ^/api-registro/, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/api/.*, role: ROLE_API } 
providers: 
    app_user: 
     entity: { class: Alood\BackBundle\Entity\Usuario, property: user } 
encoders: 
    Alood\BackBundle\Entity\Usuario: plaintext 

Мой контроллер

public function apiLoginAction() 
{ 
    $peticion = $this->getRequest(); 
    $sesion = $peticion->getSession(); 
    $usuario = $this->get('security.context')->getToken()->getUser(); 
    $error = $peticion->attributes->get(SecurityContext::AUTHENTICATION_ERROR, 
    $sesion->get(SecurityContext::AUTHENTICATION_ERROR)); 

    $securityContext = $this->container->get('security.context'); 
    if($securityContext->isGranted('IS_AUTHENTICATED_FULLY')){ 
     $texto["user"] = $usuario->getUser(); 

     return new JsonResponse($texto); 
    } 
} 

Примечание: Если я повторить те же действия, в другой функции моего контроллера I получить проблему в моем приложении для Android и я не знаю, как это решить.

+0

Что говорят журналы вашего веб-сервера о ошибке http 500? что-нибудь внутри 'app/logs/dev.log' или' app/logs/prod.log'? – nifr

+0

извините, я написал это неправильно, я получаю ошибку 404, но все согласуется в routing.yml/api/usuario/{id} – soni

+0

вы уверены, что получаете 404? а не 403 Запрещено или 401 Несанкционировано? 404 страница не найдена ... вы уверены, что страницы доступны и маршруты правильно настроены? – nifr

ответ

0

Это была проблема с опечатками в моей routing.yml, поэтому, если это полезно для кого-то, я должен сказать, что это работает правильно.

Смежные вопросы