用于Struts2的Picketlink Wildfly 10 WebApp重定向始终为home.action

时间:2017-06-27 09:16:13

标签: java security jboss struts2 picketlink

我正在Jboss Wildfly 10上使用struts2开发一个简单的Web应用程序。为了使用Picketlink和SAML2,需要使用外部身份服务器(由WSO2IS公开)。 我使用WSO2IS创建了一个自定义服务提供程序,在Web应用程序中定义了安全性,并在JBoss中配置了picketlink以使用在WSO2IS中配置的ServiceProvider。 当我尝试打开localhost:8087 / MyApp SSO工作并在WSO2IS登录页面上重定向时,安全过滤器工作正常,但在登录后,samlsso提供程序总是有一个直通,https:// localhost:9446 / samlsso,该节目重定向目标操作的页面(还带有“POST”按钮)。

问题是,或者按下按钮或自动重定向回到home.action的操作,我可以在应用程序的页面中导航。我调用的任何链接,通过网络按钮,调用正确的操作,然后通过令牌(例如https:// localhost:9446 / samlsso?SAMLRequest =令牌)重定向(我认为是picketlink)samlsso然后返回到home.action。

所有操作都有返回类型“tyles”,以及ajax调用的2 json结果。

这里详细介绍了我的配置:

JBoss的web.xml中

<jboss-web>
    <context-root>MYAPP</context-root>
    <security-domain>MYAPP_SD</security-domain>
</jboss-web>

Web.xml配置如下:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>NoLock</web-resource-name>
        <url-pattern>/css/*</url-pattern>
        <url-pattern>/images/*</url-pattern>
        <url-pattern>/img/*</url-pattern>
        <url-pattern>/js/*</url-pattern>
        <url-pattern>/jsp/*</url-pattern>
        <url-pattern>/struts/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
</security-constraint>
<security-constraint>
    <web-resource-collection>
        <web-resource-name>MYAPPContext</web-resource-name>
        <url-pattern>/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>Application/MyAppRole</role-name>
    </auth-constraint>
</security-constraint>

<!-- Define the Login Configuration for this Application -->
<login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
        <form-login-page>/login</form-login-page>
        <form-error-page>/error.jsp</form-error-page>
    </form-login-config>
</login-config>

<security-role>
    <role-name>Application/MyAppRole</role-name>
</security-role>

角色 Application / MyAppRole 被定义到配置名为MyAppRole的新服务推荐器的wso2 Identity Server中。我在其上添加了一些用户。

在Jboss中,在configuration-&gt; subsystem-&gt; security中,我创建了一个安全域 MyApp_SD ,其验证码为“
org.picketlink.identity.federation.bindings.jboss.auth.SAML2LoginModule“

即使在Jboss中,在configuration-&gt; picketlink中,我通过安全域“ MyApp_SD ”(受信任域localhost:8087)创建了一个新的“MyApp_Federation”,并进入了我创建的联盟一个名为 MyApp.war 的新服务提供商,甚至通过 MyApp_SD 作为安全域,并且SAMLHandler配置如下:

  • SAML2LogOutHandler:类名org.picketlink.identity.federation.web.handlers.saml2.SAML2LogOutHandler
  • RolesGenerationHandler:类名org.picketlink.identity.federation.web.handlers.saml2.RolesGenerationHandler
  • SAML2AuthenticationHandler:班级名称
    org.picketlink.identity.federation.web.handlers.saml2.SAML2AuthenticationHandler,具有以下处理程序参数:
    1. ASSERTION_SESSION_ATTRIBUTE_NAME:org.picketlink.sp.assertion
    2. DISABLE_ROLE_PICKING:false
    3. CLOCK_SKEW_MILIS:120000
    4. ROLE_KEY:http:// wso2.org/claims/role
  • SAML2AttributeHandler:类名org.picketlink.identity.federation.web.handlers.saml2.SAML2AttributeHandler,具有以下处理程序参数:
    1. ATTRIBUTE_CHOOSE_FRIENDLY_NAME:false

那么,我的配置有问题吗?是web.xml约束,struts2操作配置还是picketlink配置的问题?

1 个答案:

答案 0 :(得分:0)

所以,我发现了问题,并且在firefox中使用了隐身模式。使用正常模式,动作链接会自动使用jsessionid进行修改,并且所有工作都很好。但是,我必须编辑生成url的所有javascript方法和添加jsessionid的ajax操作js。