学校で実装する必要がある Web アプリケーションを使用して大学を卒業しようとしています。すべてが完璧に機能しており、11 月までに準備する必要がありますが、セキュリティの管理に本当に苦労しています。アプリケーションは、1 つ以上の異なるロールを持つ異なるユーザーを持つことができる必要があります (ユーザー 1: ロール: 学生、ユーザー 2: 管理者、ユーザー 3: 教授、上司)。
ユーザーがログインすると、ロールに応じて別のビューにリダイレクトされ、そのロールで許可されていないリソースにアクセスしようとすると、エラー ページが表示されます。
これは私がこれまでに試したことです:
方法 1:
認証方法: web.xml で次のように指定されます。
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
</form-login-config>
</login-config>
次に、名前 j_username および j_password をカスタム jsp で j_security_check とともに使用します。
認可方法: DataSourceRealm経由で Container Security (Tomcat) を使用しました。これにより、データベースに接続し、server.xml でマッピングする必要がある 2 つのテーブルからユーザーとそれに関連付けられたロールを取得できます。
<Resource auth="Container" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" maxActive="100" maxIdle="30" maxWait="1000" name="jdbc/sstt" password="pass" type="javax.sql.DataSource" url="jdbc:sqlserver://localhost;databaseName=BDTT" username="sa"/>
web.xml:
<security-constraint>
<web-resource-collection>
<web-resource-name>Students Only</web-resource-name>
<url-pattern>/student/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>student</role-name>
</auth-constraint>
</security-constraint>
// Same mapping for professor, admin, and boss (/professor/* maps to professor role)
結果: /members/ (セキュリティ制約内の web.xml で構成されている) などの制限された領域にアクセスしようとすると、常に完璧に機能するため、承認の目標が達成されました。
問題: ログイン フォームを送信すると、j_security_check が起動されるため、ユーザー ロールに応じてリダイレクトするのに役立つ Struts2 アクションを起動できません。これが主な問題です。すべてが完璧でしたが、コンテナ セキュリティでログインした後、リダイレクトする方法が見つかりません。
方法 2:
認証方法: データベースにクエリを実行し、パスワードが正しいかどうかを確認する LoginAction クラス。また、ユーザーの役割もチェックします。ここでは、「admin」や「student」などの文字列を返し、適切な index.jsp リソースにリダイレクトできるはずですが、これは、ユーザーが 1 つの役割しか持てない場合にのみ機能します。 、しかしそれらは多く持つことができるので、ユーザーの役割の合計に応じてビューをどのように構築する必要がありますか? どの文字列を返すでしょうか?
承認方法: セッションからユーザー オブジェクトを取得するカスタム インターセプターを作成し (このユーザー オブジェクトは、ユーザーが正常に認証された場合にのみセッションに存在する必要があります)、ここで承認ロジックを実行します。
問題: いくつかの役割に応じてビューを構築する方法を見つけることができません。Interceptor に関する問題は、それが私のアクションのみを保護することです。そのため、承認の目標は達成されましたが、アクションに対してのみでした。つまり、/students/ と書くことができました。 URL は、認証を試みることなく /students/index.jsp に変更されます。
その他のプラン
フィルターを使用して承認を達成できるのではないかと考えていましたが (そうすれば、動的リソースと静的リソースの両方を保護できます)、/ にマップする Struts2 フィルターを構成したので、それが良い方法になるかどうかはわかりません。 *
私はJAASまたはSpring Securityを使用できることも探していましたが、これを達成し、認証し、ロールに基づいてリダイレクトし、認可できるかどうかはわかりません。必要なことを実行できないことを知るためにこれ以上数時間を費やしたくはありません。これを完了するのに非常に短い時間しかありません。
その他の質問
jsp を WEB-INF の下に配置するのは本当に良い方法ですか? もしそうなら、struts.xml 内の jsp へのすべてのアクセスを WEB-INF/jsp/students/index.jsp に書き直す必要がありますか? ( 例えば )。または、/jsp/* url パターンへの直接アクセスを避けるために、web.xml で定義されたセキュリティ制約に固執する必要がありますか?
いつもお世話になり、ありがとうございます。