Devel Grailsアプリケーションを単一のHTPassWDのようなパスワードで保護します
-
28-09-2019 - |
質問
パブリックドメインの同僚にGrailsアプリを見せています。これまでのところ、私はDevel Modeで作業しており、戦争で展開していません。
Onybodyがチェックアウト /プレイしないようにするために、アプリケーションを保護する必要があります。私はすでにユーザーMGMTを導入していますが、SBが何かを見る前に.htpasswdのような保護を持ちたいと思います。可能であれば、アプリケーション自体をプラグインで拡大したくありません(たとえば、Shiro)。
何か考え/提案はありますか?
どうもありがとう!
解決
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
}
}
}
}
他のヒント
以下を$ catalina_home/に追加しますconf/tomcat-users.xml トムキャットを再起動します:
<role rolename="role1"/>
<user username="user1" password="password1" roles="role1"/>
Grails Project Rootで、実行してください 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>