1

ここで非常に明白な何かが欠けていると思いますが、検索と試行に約 4 時間を費やしましたが、解決策にたどり着けなかったので、何か助けがあるかもしれません。私はこのガイドに従っていました: https://docs.jboss.org/author/display/PLINK/Standalone+Web+Applications%28All+Servlet+Containers%29 SP と IDP を接続してログインを実行できました。セッションにユーザー プリンシパルが表示されます。ただし、Tomcat セキュリティを追加するとすぐに、上記の例のようにアプリケーションの一部を保護するために機能しません。web.xml の関連部分は次のとおりです。

<filter>
    <description>
        The SP Filter intersects all requests at the SP and sees if there is a need to contact the IDP.
    </description>
    <filter-name>SPFilter</filter-name>
    <filter-class>org.picketlink.identity.federation.web.filters.SPFilter</filter-class>
    <init-param>
        <param-name>ROLES</param-name>
        <param-value>sales,manager</param-value>
    </init-param>
    <init-param>
        <param-name>IGNORE_SIGNATURES</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>


<filter-mapping>
    <filter-name>SPFilter</filter-name>
    <url-pattern>/login</url-pattern>
</filter-mapping>


<!-- Processes application requests -->
<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>


<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>*.html</url-pattern>
</servlet-mapping>


<security-constraint>
    <web-resource-collection>
        <web-resource-name>Manager command</web-resource-name>
        <url-pattern>/loginarea/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>manager</role-name>
    </auth-constraint>
</security-constraint>
<security-role>
    <description>
        The role that is required to log in to the Manager Application
    </description>
    <role-name>manager</role-name>
</security-role>

/loginarea/ の下にある何かにアクセスしようとすると、SPFilter やコードにアクセスすることさえせずに 403 が返されます。ただし、他の URL の下にあるコードから、ユーザー プリンシパルを読み取ることができ、Tomcat ユーザーが含まれています (クイックスタートの例から)。興味深いことに、ロールを読み取ろうとすると、常に null が返されます。

プリンシパル userPrincipal = (プリンシパル) request.getSession().getAttribute(GeneralConstants.PRINCIPAL_ID); <-- 正しいユーザー名を持つプリンシパルを返します

ロールのリスト = (リスト) request.getSession().getAttribute(GeneralConstants.ROLES_ID); <- null

security-constraint を削除すると、問題なくアプリとコントローラーにアクセスできます。例から基本的なリダイレクト idp を使用しています。

よろしくレオン

4

1 に答える 1