Spring security OpenSSO和JasperReports服务器集成

Spring security OpenSSO和JasperReports服务器集成,spring-security,jasperserver,opensso,Spring Security,Jasperserver,Opensso,我尝试集成JasperServer4.7.0和OpenSSO11.0 我选择的方法是使用OpenAM J2EE代理和Spring Security J2EEPreAuthenticatedFilter 当用户尝试访问jasper主页时,代理将其重定向到OpenAM登录页面,然后如果身份验证成功,则在HTTPServletRequest对象中填充用户主体。Spring security J2EEPreauthenticatedFilter获取主体,如果它不为null,则读取用户角色并授予对请求资源

我尝试集成JasperServer4.7.0和OpenSSO11.0

我选择的方法是使用OpenAM J2EE代理和Spring Security J2EEPreAuthenticatedFilter

当用户尝试访问jasper主页时,代理将其重定向到OpenAM登录页面,然后如果身份验证成功,则在HTTPServletRequest对象中填充用户主体。Spring security J2EEPreauthenticatedFilter获取主体,如果它不为null,则读取用户角色并授予对请求资源的访问权

问题是在成功进行OpenAm身份验证后,J2EEPreAuthenticatedFilter返回null,用户无法访问jasperserver主页

为什么J2EEPreAuthenticatedFilter无法从HttpServletRequest对象获取主体

我使用Tomcat7作为jasper服务器

这是web.xml中的OpenAm代理筛选器和安全约束:

<filter>
        <filter-name>Agent</filter-name>
        <display-name>Agent</display-name>
        <description>OpenAM Policy Agent Filter</description>
        <filter-class>com.sun.identity.agents.filter.AmAgentFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>Agent</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>ERROR</dispatcher>
    </filter-mapping>

<security-role>
    <role-name>ROLE_TESTER</role-name>
</security-role>

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Authenticated</web-resource-name>
        <description></description>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>*</role-name>
    </auth-constraint>
</security-constraint>

我解决了这个问题,只需在web.xml文件中添加以下代码:

<login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
        <form-login-page>/login.html</form-login-page>
        <form-error-page>/accessdenied.html</form-error-page>
    </form-login-config>
</login-config>

形式
    
/login.html
/accessdenied.html
    
并从web.xml中删除以下代码:

<security-constraint>
   <web-resource-collection>
        <web-resource-name>JasperServerWebApp</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>NONE</transport-guarantee>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

JasperServerWebApp
/*
没有一个
保密的

单独配置代理筛选器不足以为web应用程序启用声明式安全性。您还应该在web.xml.Hi中设置必要的安全约束,Peter!my web.xml中存在安全约束。我将它添加到我的第一条消息中。访问jasper的用户具有角色\u TESTER角色。
<login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
        <form-login-page>/login.html</form-login-page>
        <form-error-page>/accessdenied.html</form-error-page>
    </form-login-config>
</login-config>
<security-constraint>
   <web-resource-collection>
        <web-resource-name>JasperServerWebApp</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>NONE</transport-guarantee>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>