2014-10-31 2 views
0

У меня есть веб-приложение java, которое использует Apache в качестве передней части Tomcat. У меня есть базовая конфигурация аутентификации в файле web.xmlбазовая аутентификация на apache

<security-constraint> 
    <web-resource-collection> 
    <web-resource-name> 
    </web-resource-name> 
    <url-pattern>/secure/*</url-pattern> 
    </web-resource-collection> 
    <user-data-constraint> 
    <transport-guarantee>NONE</transport-guarantee> 
</user-data-constraint> 
<auth-constraint> 
    <role-name>user</role-name> 
</auth-constraint> 
</security-constraint> 
<login-config> 
    <auth-method>BASIC</auth-method> 
</login-config> 

Теперь я хочу, чтобы настроить эту конфигурацию на апач

Я создал пользователь файл в C: \ Program Files (x86) \ Apache2 \ каталог конф и добавил имя пользователя/пароль.

добавить эту строку в файл httpd.conf

<Location "/secure/*"> 
    AuthUserFile conf/users 
    AuthName "This is a protected area" 
    AuthType Basic 
    Require valid-user 
</Location> 

Когда я открываю приложение с браузером http://example.com/app/secure его доза не запрашивает аутентификацию. Какая доза здесь неправильная?

+0

(a) Создал ли пользовательский файл с помощью утилиты apache passwd? (b) Перезапустили ли вы apache или передали его, чтобы перезагрузить его конфигурацию? (c) У вас есть виртуальные серверы, работающие в этом Apache? – RealSkeptic

+0

Да, я использую утилиту passwd, а затем перезапускаю apache. У меня нет виртуальных серверов – user1187329

ответ

0

директива должна быть:

<Location "/app/secure/"> 

без *. Директива Location автоматически применяется к этому URL-адресу и всему под ним (/app/secure/myServlet, /app/secure/more/otherServlet и т. Д.).

Если вы хотите сопоставить образец в местоположении, вы должны использовать LocationMatch, но я думаю, что для вашего случая это не важно.

Обратите внимание, что строка Location должна быть целым путем, начиная с косой черты после домена. Поэтому, если ваш домен http://example.com/app/secure/, Location не является только /secure/, а скорее /app/secure/.

В качестве альтернативы, если вы на самом деле выполняется приложение с app/secure, а не app/secure/, вы должны удалить последнюю черту:

<Location "/app/secure"> 

/app/secure/ матчи /app/secure/something, но это не соответствует /app/secure. /app/secure соответствует /app/secure/something, но также и /app/secure.

+0

Благодарим за Отзыв, но он все еще не работает – user1187329

+0

Упс. Теперь я увидел ваше последнее предложение в вопросе, я заметил, что это действительно должно быть '/ app/secure /'. Обновление моего ответа. – RealSkeptic

+0

Большое спасибо, работал – user1187329

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