web.xmlでsecurity-constraintを使用しようとしました。役割を使って管理者に許可を与えました。サーブレットが保護され、管理者だけがアクセスできるかどうかをテストする方法外部ユーザーからサーブレットを保護する方法は?
答えて
サーブレットをテストするには、少なくとも2つのGoogleアカウントが必要です。 Google App Engine管理コンソールで少なくとも1つのGoogleアカウントをビューアとして追加する必要があります。他のGoogleアカウントは追加しないでください。管理コンソールに追加されていないGoogleアカウントは、役割が管理者として定義されているサーブレットにはアクセスできません。
何らかの理由でテストが失敗した場合は、ドキュメントのすべての手順を実行してサーブレットを保護し、認証スキーマを実装する必要があります。 Google OAuthとUserServiceを例にして以下に概要を示します。
Google App Engineを使用すると、アプリケーション内で使用する2つの役割User and Adminが提供されます。
管理者ユーザーは、Google App Engineプロジェクトにany one of the three rolesとしてリストされているユーザーとして定義されています。そのため、サーブレットへの管理者アクセス権を付与する場合は、http://appengine.google.comパネルにビューアとして追加できます。
UserServiceクラスを使用すると、ログインしたユーザーにアクセスできます。これを使用してユーザーのログインURLを作成し、自分のGoogleアカウントを使用してGoogleからログオンし、アプリケーションにリダイレクトしてからUserService.isUserAdmin()
を使用して、そのユーザーが本当に管理者ユーザーかどうかを判断する必要があります。
Using the Users Serviceは、UserServiceクラスの使用を開始する方法を詳しく説明しています。
package guestbook;
import java.io.IOException;
import javax.servlet.http.*;
import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;
public class GuestbookServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
if (user != null) {
resp.setContentType("text/plain");
if(userService.isUserAdmin()) {
resp.getWriter().println("Hello, " + user.getNickname() + ", you are logged in as an admin");
} else {
resp.getWriter().println("Hello, " + user.getNickname());
}
} else {
resp.sendRedirect(userService.createLoginURL(req.getRequestURI()));
}
}
}
Google App Engine Users Java API Overviewは、Google App Engineの上のユーザのログイン処理する方法を示しています
import java.io.IOException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;
public class MyServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
UserService userService = UserServiceFactory.getUserService();
String thisURL = req.getRequestURI();
resp.setContentType("text/html");
if (req.getUserPrincipal() != null) {
resp.getWriter().println("<p>Hello, " +
req.getUserPrincipal().getName() +
"! You can <a href=\"" +
userService.createLogoutURL(thisURL) +
"\">sign out</a>.</p>");
} else {
resp.getWriter().println("<p>Please <a href=\"" +
userService.createLoginURL(thisURL) +
"\">sign in</a>.</p>");
}
}
}
サーブレットの保護:
を使用すると、ユーザーはすべきではないページがある場合サインインしない限りアクセスすることができます。デプロイメント記述子内のページにセキュリティ制約を設定できます(web.xml
「Deployment Descriptor: Security and Authentication」ページでは、管理者だけが特定のサーブレットにアクセスできるようにweb.xmlを変更する方法を示しています。この例では
<security-constraint>
<web-resource-collection>
<url-pattern>/profile/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>*</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
、サーブレット/profile
は*
によって示される任意の役割を持つユーザによってアクセス可能であり、そして/admin
サーブレットロールadmin
持つユーザーによってのみアクセス可能です。
Google App Engine Javaにはセキュリティが組み込まれていますが、役割は多少限定されています。ユーザーの役割をより細かく制御する必要がある場合は、Luke Taylor's Post on Spring Security in Google App Engineを参照してください。この例は古いですが、ログレベルをTRACEに設定すると、Springの最新バージョンと最新のGAE SDKで動作させることができます。
- 1. 外部アプリケーションからGwtServiceImplサーブレットを呼び出す方法は?
- 2. 外部の要求からフォルダを保護する
- 3. ユーザーからPHPファイルマネージャを保護する
- 4. サーブレットから外部WebサービスにHTTP POST要求を送信する方法は?
- 5. デコンパイルからJavaコードを保護または保護する方法
- 6. ユーザー名、パスワード、ユーザー数を保護する方法
- 7. サーブレットとjspの保護
- 8. 悪意のあるユーザーから画像を保護する方法
- 9. 外部呼び出しからのファイルの保護
- 10. 外部サーバー(Java、Groovy)からログイン保護されたページにアクセス
- 11. サイトと内部APIを保護する方法は?
- 12. Oracleセキュリティ - ユーザーがDROP TABLEから独自の表を保護する方法
- 13. Oracle外部表データ・ファイルの保護
- 14. MVC RESTful Urlsをハッキングから保護する方法は?
- 15. CSSからHTMLタグを保護する方法は?
- 16. OpenGlで破線を「ダンス」から保護する方法は?
- 17. Jarファイルを逆コンパイルから保護する方法は?
- 18. 偽のデジタル署名からソフトウェアライセンスを保護する方法は?
- 19. ベロシティテンプレートを改ざんから保護する方法は?
- 20. cakephpビューからロジックを保護する方法は?
- 21. サーブレット。私のURLから外部ディレクトリにアクセスするには?
- 22. 内部保護と内部保護の違いはありますか?
- 23. 共有MySqlユーザーを保護する方法
- 24. NSUserDefaultsを保護する方法は?
- 25. session_idを保護する方法は?
- 26. webHttpBindingを保護する方法は?
- 27. Webサービスを保護する方法は?
- 28. Blobstore - サーブレットからデータを保存する方法
- 29. 誰かからmysqlデータベースを保護する方法
- 30. R .call()インタフェースとEXTPTRSXP:外部で割り当てられたオブジェクトによる保護/保護解除の理解
私は、Spring Frameworkの残りの部分がなくてもSpring Securityを使用できるとは思いません。特定のフレームワークに強制されることなく使用できる類似のものはありますか?ありがとう – husayt
@husayt - 春はかなりモジュラーです。 Spring SecurityはapplicationSecurity-Contextで構成されていました。xmlでは、どのようなURLパターンがどのような役割にマッピングされているかを定義しました。残りは履歴でした。私は静的ファイルをロックダウンすることができたので、それをフレームワークの一部ではないものに適用することができます。要するに、あなたは本当に確かめるためにそれを試さなければならないでしょう。 – jmort253
優秀な答え! – nhaarman