单点登录 windows项目中cas 客户端搭建

linux上搭建cas服务端

1. 导入cas客户端架包

<!-- https://mvnrepository.com/artifact/org.jasig.cas.client/cas-client-core -->

<dependency>

    <groupId>org.jasig.cas.client</groupId>

    <artifactId>cas-client-core</artifactId>

    <version>3.5.0</version>

</dependency>

2. 添加过滤器

<!-- ==============================================单点登录开始==================================== -->

<!-- 用于单点退出,该过滤器用于实现单点登出功能 -->

    <listener>

        <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>

    </listener>

    <!-- 该过滤器用于实现单点登出功能 -->

    <filter>

        <filter-name>CAS Single Sign Out Filter</filter-name>

        <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>

    </filter>

    <filter-mapping>

        <filter-name>CAS Single Sign Out Filter</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

    <!--   该过滤器负责用户的认证工作,casServerLoginUrl:cas服务端登录地址(注意这里比上面的多了'/login') -->

    <filter>

        <filter-name>CAS Filter</filter-name>

        <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>

        <init-param>

            <param-name>casServerLoginUrl</param-name>

            <param-value>https://域名:8443/cas/login</param-value>

        </init-param>

        <init-param>

            <param-name>serverName</param-name>

            <param-value>http://localhost:8080</param-value>

        </init-param>

    </filter>

    <filter-mapping>

        <filter-name>CAS Filter</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

    <!-- 该过滤器负责对Ticket的校验工作 -->

    <filter>

        <filter-name>CAS Validation Filter</filter-name>

        <filter-class>

            org.jasig.cas.client.validation.Cas10TicketValidationFilter</filter-class>

        <init-param>

            <param-name>casServerUrlPrefix</param-name>

            <param-value>https://域名:8443/cas</param-value>

        </init-param>

        <init-param>

            <param-name>serverName</param-name>

            <param-value>http://localhost:8080</param-value>

        </init-param>

    </filter>

    <filter-mapping>

        <filter-name>CAS Validation Filter</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

    <!-- ==========================================可选配置开始======================================= -->

    <!--

        该过滤器负责实现HttpServletRequest请求的包裹,比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名。

        HttpServletRequest request2 = (HttpServletRequest) request;

 // 从Cas服务器获取登录账户的用户名(2种方式)

 String username1 = request2.getUserPrincipal().toString();

 String username2 = request2.getRemoteUser();

    -->

    <filter>

        <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>

        <filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>

    </filter>

    <filter-mapping>

        <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

    <!--

                      该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。比如AssertionHolder.getAssertion().getPrincipal().getName()。

     Assertion assertion = AssertionHolder.getAssertion();

 String userName = assertion.getPrincipal().getName();

    -->

    <filter>

        <filter-name>CAS Assertion Thread Local Filter</filter-name>

        <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>

    </filter>

    <filter-mapping>

        <filter-name>CAS Assertion Thread Local Filter</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

    <!-- ==========================================可选配置结束======================================= -->

<!-- ==============================================单点登录结束==================================== -->

3. 客户端导入证书

不导入证书会出现以下错误

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

keytool -import -keystore %JAVA_HOME%\jre\lib\security\cacerts -file 证书存放目录\cas.crt -alias cas

:这里JAVA_HOME指代的路径中不能有空格,如有空格则切换到security目录下,

       keytool -import -alias cas -keystore cacerts -file 证书存放目录\cas.crt

4. 测试

这时会出现URL中带有jsessionid而无法跳到正确页面

解决办法:

web.xml中添加

<session-config>

    <tracking-mode>COOKIE</tracking-mode>

</session-config>

Servlet3.0规范中的<tracking-mode>允许你定义JSESSIONID是存储在cookie中还是URL参数中。如果会话ID存储在URL中,那么它可能会被无意的存储在多个地方,包括浏览器历史、代理服务器日志、引用日志和web日志等。暴露了会话ID使得网站被session劫持攻击的几率大增。然而,确保JSESSIONID被存储在cookie中非常容易

5. 配置域名

编辑C:\Windows\System32\drivers\etc\hosts文件

     windows主机ip   域名

6. 登录测试


猜你喜欢

转载自blog.csdn.net/qq_21299835/article/details/79893297