Защита приложения devel grails с помощью одного пароля типа htpasswd - PullRequest
5 голосов
/ 24 ноября 2010

Я показываю приложение grails некоторым коллегам в открытом доступе.Пока что я работаю в режиме devel и не развернут через war.

Мне нужно защитить приложение, чтобы никто не мог проверить его / поиграть с ним.У меня уже есть пользователь mgmt, но прежде чем sb увидит что-либо, я бы хотел иметь защиту, подобную .htpasswd.Если возможно, я не хочу расширять само приложение плагинами (например, shiro).

Есть мысли / предложения?

Большое спасибо!

Ответы [ 2 ]

5 голосов
/ 24 ноября 2010

Вы можете использовать HTTP-аутентификацию. HTTP-аутентификация очень проста в реализации, но она не очень безопасна и не пригодна для использования. Вам лучше использовать Shiro или Spring-Security для реального решения. Тем не менее, простой фильтр может проверить заголовок авторизации HTTP и вернуть код состояния 401, если он отсутствует. Это заставит браузер открыть окно имени пользователя / пароля и повторно отправить форму с именем пользователя и паролем, закодированными в заголовках.

Фильтры Grails должны иметь имя класса, оканчивающееся на «Фильтры», и помещаться в каталог grails-app / conf. Вот пример:

class SimpleAuthFilters {
    def USERNAME = "foo"
    def PASSWORD = "bar"

    static filters = {
        httpAuth(uri:"/**") {
            before = {
                def authHeader = request.getHeader('Authorization')
                if (authHeader) {
                    def usernamePassword = new String(authHeader.split(' ')[1].decodeBase64())
                    if (usernamePassword == "$USERNAME:$PASSWORD") {
                        return true
                    }
                }
                response.setHeader('WWW-Authenticate', 'basic realm="myRealm"')
                response.sendError(response.SC_UNAUTHORIZED)
                return false
            }
        }
    }
}
4 голосов
/ 24 ноября 2010

Добавьте следующее в $ CATALINA_HOME / conf / tomcat-users.xml и перезапустите Tomcat:

<role rolename="role1"/>
<user username="user1" password="password1" roles="role1"/>

В корне проекта Grails выполните grails install-templates. Это поместит src / templates / war / web.xml в проект.
(Если файл не виден в вашей IDE, это может быть ошибка. Затем найдите его в файловой системе.)

Добавьте следующее в web.xml (как дочерний элемент тега web-app):

<security-constraint>
  <web-resource-collection>
    <web-resource-name>
      Entire Application
    </web-resource-name>
    <url-pattern>/*</url-pattern>
  </web-resource-collection>
  <auth-constraint>
      <role-name>role1</role-name>
  </auth-constraint>
</security-constraint>

<login-config>
  <auth-method>BASIC</auth-method>
  <realm-name>Restricted Area</realm-name>
</login-config>
...