Spring 用于与自定义 SSO 身份验证集成的 mvc 配置

Spring mvc configuration to integrate with a custom SSO authentication

我无法集成现有的自定义单点登录服务(用于验证我的 spring mvc 应用程序 -aka。myApp-)。

一旦我将 spring DispatcherServlet 映射到“/”,myApp 将跳过针对 SSO 应用程序的身份验证过程,无论是否存在会话。

Web.xml(Spring配置)

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
</context-param>

<!-- Spring MVC DispatcherServlet -->
<servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

这是我需要在 myApp web.xml 中集成的配置,以集成 SSO 身份验证:

Web.xml(自定义 SSO 配置)

<filter>
    <filter-name>SSOAuthenticationFilter</filter-name>
    <filter-class>custom.sso.SSOAuthenticationFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>SSOAuthenticationFilter</filter-name>
    <url-pattern>/WEB-INF/views/*</url-pattern>
</filter-mapping>

<!-- Context Params -->
<context-param>
    <param-name>myAppId</param-name>
    <param-value>65asd5a4sd65asd65a4sd65asd4</param-value>
</context-param>
<context-param>
    <param-name>loginPath</param-name>
    <param-value>login.jsp</param-value>
</context-param>
<context-param>
    <param-name>ssoAppPath</param-name>
    <param-value>http://localhost:8080/SSO_AuthenticationApp</param-value>
</context-param>

<!-- SSO Login Servlet -->
<servlet>
    <servlet-name>SSOloginServlet</servlet-name>
    <servlet-class>custom.sso.SSOLoginServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>SSOloginServlet</servlet-name>
    <url-pattern>/login</url-pattern>
</servlet-mapping>

<!-- SSO properties (myAppId, ssoAppPath, loginPath) -->
<listener>
    <listener-class>custom.sso.SSOPropertiesRetriever</listener-class>
</listener>

如何配置 spring 让 SSO servlet 执行身份验证过程?

我在想是否有一种方法可以在 spring dispatcher-servlet-config.xml?[=13 中将 customSSO servlet 声明为 bean =]

或者在 @Controller 中实现它?

(我对 sso 束手无策,我被迫使用它进行身份验证,因为 myApp 将只是通过此自定义 sso 登录的一系列应用程序中的另一个...我更愿意使用 spring 安全)。

谢谢。

已编辑:

我最终选择了迁移到 Spring 引导,似乎以这种方式配置项目更加清晰。

对于过滤器,您可以使用 SpringFilter 并在 bean 中实现逻辑:

<filter>
    <filter-name>springFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    <init-param>
        <param-name>targetBeanName</param-name>
        <param-value>authenticationFilter</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>springFilter</filter-name>
    <url-pattern>/some-url</url-pattern>
</filter-mapping>

对于 servlet,我想您可能必须将映射更改为如下所示:

<servlet>
        <servlet-name>loginServlet</servlet-name>
        <servlet-class>my.package.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>loginServlet</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/mvc-config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/app/*</url-pattern>
    </servlet-mapping>

这里我假设所有内容都在同一个 WEB.xml 文件中