我正在向公共领域的一些同事展示一个grails应用程序。到目前为止,我正在开发模式,并没有通过战争部署。
我需要确保应用程序安全,以防止他们查看/播放它。我已经有一个用户mgmt,但在sb看到任何我希望有.htpasswd之类的保护之前。如果可能的话,我不想用插件(例如,shiro)扩大应用程序本身。
有任何想法/建议吗?
非常感谢!
答案 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>