使用单个htpasswd密码保护devel grails应用程序

时间:2010-11-24 15:13:22

标签: security grails .htpasswd http-basic-authentication

我正在向公共领域的一些同事展示一个grails应用程序。到目前为止,我正在开发模式,并没有通过战争部署。

我需要确保应用程序安全,以防止他们查看/播放它。我已经有一个用户mgmt,但在sb看到任何我希望有.htpasswd之类的保护之前。如果可能的话,我不想用插件(例如,shiro)扩大应用程序本身。

有任何想法/建议吗?

非常感谢!

2 个答案:

答案 0 :(得分:5)

您可以使用HTTP身份验证。 HTTP身份验证很难实现,但它不是非常安全或可用。你最好使用shiro或spring-security来获得真正的解决方案。也就是说,一个简单的过滤器可以检查HTTP Authorization标头并返回401状态代码(如果不存在)。这将强制浏览器弹出用户名/密码框,并使用标题中编码的用户名和密码重新提交表单。

Grails过滤器必须具有以“Filters”结尾的类名,并进入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
            }
        }
    }
}

答案 1 :(得分:4)

将以下内容添加到$ 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中不可见,这可能是一个错误。然后在文件系统中找到它。)

Add the following 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>