Позвольте мне объяснить мою ситуацию, я разработал полный бэкэнд для 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 и я не знаю, как это решить.
Что говорят журналы вашего веб-сервера о ошибке http 500? что-нибудь внутри 'app/logs/dev.log' или' app/logs/prod.log'? – nifr
извините, я написал это неправильно, я получаю ошибку 404, но все согласуется в routing.yml/api/usuario/{id} – soni
вы уверены, что получаете 404? а не 403 Запрещено или 401 Несанкционировано? 404 страница не найдена ... вы уверены, что страницы доступны и маршруты правильно настроены? – nifr