CAS单点登录系统

2020-05-08  本文已影响0人  Demon先生

1. CAS单点登录介绍

1.1. 什么是单点登录

单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

我们目前的系统存在诸多子系统,而这些子系统是分别部署在不同的服务器中,那么使用传统方式的session是无法解决的,我们需要使用相关的单点登录技术来解决。

image

1.2. 什么是CAS

CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点:

【1】开源的企业级单点登录解决方案。

【2】CAS Server 为需要独立部署的 Web 应用。

【3】CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal,

Ruby 等。

从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS

Server。下图是 CAS 最基本的协议过程:

image

SSO单点登录访问流程主要有以下步骤:

1. 访问服务:SSO客户端发送请求访问应用系统提供的服务资源。

2. 定向认证:SSO客户端会重定向用户请求到SSO服务器。

3. 用户认证:用户身份认证。

4. 发放票据:SSO服务器会产生一个随机的Service Ticket。

5. 验证票据:SSO服务器验证票据Service Ticket的合法性,验证通过后,允许客户端访问服务。

6. 传输用户信息:SSO服务器验证票据通过后,传输用户认证结果信息给客户端。

2. CAS服务端部署及配置

本文采用版本为CAS.5.3,Tomcat.8.5.23,mysql8.0+。

2.1. 基础部署配置

第一步:下载官方提供的CAS部署工程和对应版本Tomcat。解压后的CAS工程目录列表如下:

image

第二步:双击build.sh运行程序,会自动开始构建war包,构建完成后会在同级目录出现target文件夹,进入文件夹目录如下:

image

第三步:将cas.war包拷贝到tomcat目录/webapps/目录下,启动tomcat(注意端口是否被占用),cas.war将会被自动解压。出现下图所示,表示启动成功。

image

第四步:浏览器输入地址:localhost:9001/cas/login,会弹出登录界面。

image

第五步:输入初始用户名和密码:casuser/Mellon,登录成功,表示基础部署完成。

image

注:如果要修改登录密码,进入tomcat目录webapps\cas\WEB-INF\classes下,修改application.properties文件中的cas.authn.accept.users字段值,如下:

image

2.2. 去除https认证

CAS默认使用的是HTTPS协议,如果使用HTTPS协议需要SSL安全证书(需向特定的机构申请和购买)。如果对安全要求不高或是在开发测试阶段,可使用HTTP协议。这里通过修改配置,让CAS使用HTTP协议。

第一步:修改webapps\cas\WEB-INF\classes\application.properties文件,在最后添加如下语句:

cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true

第二步:修改webapps\cas\WEB-INF\classes\services\HTTPSandIMAPS-10000001.json文件,添加http协议访问。


image.png

注:如果客户端没有经过https认证对CAS服务端进行访问,将会出现未认证授权的服务的界面提示。


image.png

2.3. 登录数据源设置

2.3.1 密码未加密处理

第一步:新建数据库userdb,建立用户登录的数据库表tb_user,并添加字段username,password。插入一条数据,如用户名密码为:demo:123456。

第二步:修改cas工程目录pom.xml文件,添加如下依赖。

<!--数据库认证相关start-->           
<dependency>
        <groupId>org.apereo.cas</groupId>
        <artifactId>cas-server-support-jdbc</artifactId>
        <version>${cas.version}</version>
</dependency>
<dependency>
        <groupId>org.apereo.cas</groupId>
        <artifactId>cas-server-support-jdbc-drivers</artifactId>
        <version>${cas.version}</version>
</dependency>
<dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.15</version>
</dependency>
<!--数据库认证相关 end-->

第三步:进入cas工程目录,使用命令行,先执行清除命令,再执行安装命令。

mvn clean  //清除
mvn install  //安装构建

第三步:将构建完成target目录下的cas.war文件拷贝到tomcat目录下,运行tomcat,解压war包。

第四步:修改tomcat目录下的webapps\cas\WEB-INF\classes\application.properties文件,注释掉用户名密码登录的cas.authn.accept.users字段,并添加数据库相关配置。

# cas.authn.accept.users=casuser::Mellon
#添加jdbc认证
cas.authn.jdbc.query[0].sql=SELECT * FROM tb_user WHERE username =?
#那一个字段作为密码字段
cas.authn.jdbc.query[0].fieldPassword=password
#配置数据库连接
cas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/userdb?serverTimezone=UTC&characterEncoding=utf-8
#数据库用户名
cas.authn.jdbc.query[0].user=root
#数据库密码
cas.authn.jdbc.query[0].password=5201314
#mysql驱动
cas.authn.jdbc.query[0].driverClass=com.mysql.cj.jdbc.Driver

第五步:重启tomcat,并使用第一步插入的用户名密码进行登录,如果出现登录成功界面,表示数据源设置成功。


image.png

2.3.2 密码MD5加密配置

修改tomcat目录下的webapps\cas\WEB-INF\classes\application.properties文件,添加md5加密相关配置。

#配置加密策略
cas.authn.jdbc.query[0].passwordEncoder.type=DEFAULT
cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8
cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5

2.4. 登录页面的极简改造

进入tomcat目录\webapps\cas\WEB-INF\classes\templates,修改casLoginView.html文件,这个是CAS自带的登录页面,极简更改如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录界面</title>
</head>
<body>
    <form method="post" id="fm1" th:object="${credential}" action="login">
        <h3>请输入用户名和密码</h3>

        <section>
            <label>用户名</label>
            <div>
                <input id="username" type="text" th:field="*{username}"/>
            </div>
        </section>

        <section>
            <label>密码</label>
            <div>
                <input type="password" id="password" th:field="*{password}"/>
            </div>
        </section>

        <input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
        <input type="hidden" name="_eventId" value="submit"/>
        <input type="submit" value="登录" />
        <div th:if="${#fields.hasErrors('*')}">
            <span>用户名或密码有误,请重新输入!</span>
        </div>
    </form>

    <script type="text/javascript" th:inline="javascript">
        var i = [[#{screen.welcome.button.loginwip}]]
        $( document ).ready(function() {
            $("#fm1").submit(function () {
                $(":submit").attr("disabled", true);
                $(":submit").attr("value", i);
                console.log(i);
                return true;
            });
        });
    </script>
</body>
</html>

3. CAS客户端搭建

3.1. 搭建工程并添加依赖

搭建Maven的web工程,并在pom.xml文件中添加cas客户端依赖和servlet依赖,以及tomcat插件。配置如下:

  <dependencies>
        <!-- cas -->
        <dependency>
            <groupId>org.jasig.cas.client</groupId>
            <artifactId>cas-client-core</artifactId>
            <version>3.3.3</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <configuration>
                    <!-- 指定端口 -->
                    <port>9090</port>
                    <!-- 请求路径 -->
                    <path>/</path>
                </configuration>
            </plugin>
        </plugins>
    </build>

3.2. 单点登录配置

第一步:修改web.xml文件,在文件中添加两个登录的必填配置,一个是负责用户的认证工作,另一个是负责对Ticket的校验工作(注意:这里的本地客户端地址,必须为本地ip4地址,不能是localhost或者127.0.0.1)配置如下:

<!-- 该过滤器负责用户的认证工作,必须启用它 -->
 <filter>
     <filter-name>CASFilter</filter-name>
     <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
     <init-param>
         <param-name>casServerLoginUrl</param-name>
         <param-value>[cas登录访问地址](http://192.168.25.129:8082/cas/login)</param-value> <!--这里的server是服务端的IP -->
     </init-param>
     <init-param>
         <param-name>serverName</param-name>
         <param-value>[本地客户端地址](http://192.168.88.9:9090/)</param-value>
     </init-param>
 </filter>
 <filter-mapping>
      <filter-name>CASFilter</filter-name>
     <url-pattern>/*</url-pattern>
 </filter-mapping>
 <!-- 该过滤器负责对Ticket的校验工作,必须启用它 -->
 <filter>
     <filter-name>CAS Validation Filter</filter-name>
     <filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
     <init-param>
         <param-name>casServerUrlPrefix</param-name>
         <param-value>[cas根目录地址](http://192.168.25.129:9001/cas)</param-value>
     </init-param>
     <init-param>
         <param-name>serverName</param-name>
         <param-value>[本地客户端地址](http://192.168.88.9:9090/)</param-value>
     </init-param>
 </filter>
 <filter-mapping>
     <filter-name>CAS Validation Filter</filter-name>
     <url-pattern>/*</url-pattern>
 </filter-mapping>

第二步:修改或添加index.html页面,这个页面是登录成功后,进入的第一个页面,用于验证登录是否成功。

<html>
<head>
    <meta charset="UTF-8">
</head>
<body>
    <h2>恭喜你,CAS登录成功</h2>
</body>
</html>

第三步:启动程序,访问客户端设置地址,便会进入CAS登录界面,输入用户名和密码,登录成功进入index.jsp页面。


image.png

3.3. 单点登出配置

3.3.1 未重定向登出

第一步:在web.xml文件中添加单点登出配置。

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

第二步:在index.html添加登出按钮,并添加登出的访问地址。

<html>
<head>
 <meta charset="UTF-8">
</head>
<body>
<h2>恭喜你,CAS登录成功</h2>
<a href="[CAS登出地址](http://192.168.25.129:9001/cas/logout)">退出登录</a>
</body>
</html>

第三步:测试登出操作,退出成功,返回退出成功界面。


image.png

3.3.2 重定向地址登出

第一步:修改3.3.1章节的第二步index.html文件,添加重定向地址,如下:

<html>
<head>
 <meta charset="UTF-8">
</head>
<body>
<h2>恭喜你,,CAS登录成功</h2>
<a href="[CAS登出地址?service=重定向地址](http://192.168.25.129:9001/cas/logout?service=https://www.baidu.com)">退出登录</a>
</body>
</html>

第二步:修改CAS服务端tomcat目录文件webapps\cas\WEB-INF\classes\ application.properties,添加允许重定向字段,并重启tomcat。

#配置单点登出
#配置允许登出后跳转到指定页面
cas.logout.followServiceRedirects=true
#跳转到指定页面需要的参数名为 service
cas.logout.redirectParameter=service
#登出后需要跳转到的地址,如果配置该参数,service将无效。
#cas.logout.redirectUrl=https://www.taobao.com
#在退出时是否需要 确认退出提示   true弹出确认提示框  false直接退出
cas.logout.confirmLogout=false
#是否移除子系统的票据
cas.logout.removeDescendantTickets=true
#禁用单点登出,默认是false不禁止
#cas.slo.disabled=true
#默认异步通知客户端,清除session
cas.slo.asynchronous=true

第三步:测试,点击退出登出后,将会重定向到百度页面。

3.4. 获取登录用户信息配置

在web.xml文件中,添加如下配置。

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

4. CAS客户端与SpringSecurity集成

4.1. 搭建工程并添加依赖

创建Maven工程,并在pom.xml文件中添加Spring、Spring-security相关依赖,以及tomcat插件。

<dependencies>
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <!-- spring安全框架 -->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>4.1.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>4.1.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-cas</artifactId>
            <version>4.1.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.jasig.cas.client</groupId>
            <artifactId>cas-client-core</artifactId>
            <version>3.3.3</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>log4j-over-slf4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <configuration>
                    <!-- 指定端口 -->
                    <port>9092</port>
                    <!-- 请求路径 -->
                    <path>/</path>
                </configuration>
            </plugin>
        </plugins>
    </build>

4.2. 修改和创建配置文件

第一步:创建spring-security和CAS相关的配置文件spring-security.xml,注意修改端口和CAS服务访问地址(注意:这里的自身根目录地址,必须为本地ip4地址,不能是localhost或者127.0.0.1)。

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
             xmlns:beans="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
             xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd
                        http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <http pattern="/index2.jsp" security="none"></http>

    <!--   entry-point-ref  入口点引用 -->
    <http use-expressions="false" entry-point-ref="casProcessingFilterEntryPoint">
        <intercept-url pattern="/**" access="ROLE_USER"/>
        <csrf disabled="true"/>
        <!-- custom-filter为过滤器, position 表示将过滤器放在指定的位置上,before表示放在指定位置之前  ,after表示放在指定的位置之后  -->
        <custom-filter ref="casAuthenticationFilter"  position="CAS_FILTER" />
        <custom-filter ref="requestSingleLogoutFilter" before="LOGOUT_FILTER"/>
        <custom-filter ref="singleLogoutFilter" before="CAS_FILTER"/>
    </http>

    <!-- CAS入口点 开始 -->
    <beans:bean id="casProcessingFilterEntryPoint" class="org.springframework.security.cas.web.CasAuthenticationEntryPoint">
        <!-- 单点登录服务器登录URL -->
        <beans:property name="loginUrl" value="http://192.168.25.129:8082/cas/login"/>
        <beans:property name="serviceProperties" ref="serviceProperties"/>
    </beans:bean>
    <beans:bean id="serviceProperties" class="org.springframework.security.cas.ServiceProperties">
        <!--service 配置自身工程的根地址+/login/cas   -->
        <beans:property name="service" value="http://192.168.88.9:9092/login/cas"/>
    </beans:bean>
    <!-- CAS入口点 结束 -->

    <!-- 认证过滤器 开始 -->
    <beans:bean id="casAuthenticationFilter" class="org.springframework.security.cas.web.CasAuthenticationFilter">
        <beans:property name="authenticationManager" ref="authenticationManager"/>
    </beans:bean>
    <!-- 认证管理器 -->
    <authentication-manager alias="authenticationManager">
        <authentication-provider  ref="casAuthenticationProvider">
        </authentication-provider>
    </authentication-manager>
    <!-- 认证提供者 -->
    <beans:bean id="casAuthenticationProvider"     class="org.springframework.security.cas.authentication.CasAuthenticationProvider">
        <beans:property name="authenticationUserDetailsService">
            <beans:bean class="org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper">
                <beans:constructor-arg ref="userDetailsService" />
            </beans:bean>
        </beans:property>
        <beans:property name="serviceProperties" ref="serviceProperties"/>
        <!-- ticketValidator 为票据验证器 -->
        <beans:property name="ticketValidator">
            <beans:bean class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator">
                <beans:constructor-arg index="0" value="http://192.168.25.129:8082/cas"/>
            </beans:bean>
        </beans:property>
        <beans:property name="key" value="an_id_for_this_auth_provider_only"/>
    </beans:bean>
    <!-- 认证类 -->
    <beans:bean id="userDetailsService" class="com.demon.cas.service.UserDetailServiceImpl"/>

    <!-- 认证过滤器 结束 -->
    <!-- 单点登出  开始  -->
    <beans:bean id="singleLogoutFilter" class="org.jasig.cas.client.session.SingleSignOutFilter"/>
    <beans:bean id="requestSingleLogoutFilter" class="org.springframework.security.web.authentication.logout.LogoutFilter">
        <beans:constructor-arg value="http://192.168.25.129:8082/cas/logout?service=http://192.168.88.9:9092/index2.jsp"/>
        <beans:constructor-arg>
            <beans:bean class="org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler"/>
        </beans:constructor-arg>
        <beans:property name="filterProcessesUrl" value="/logout/cas"/>
    </beans:bean>
    <!-- 单点登出  结束 -->
</beans:beans>

第二步:创建springmvc.xml文件,用于添加包扫描和注解配置。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="com.demon.cas.controller"/>
    <mvc:annotation-driven/>

</beans>

第三步:修改web.xml文件,添加认证拦截器和spring文件扫描器。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">

    <!-- 安全登录拦截,注意springSecurityFilterChain不能改变 -->
    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-security.xml</param-value>
    </context-param>
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

    <servlet>
        <servlet-name>cas-client3-springsercurity</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 指定加载的配置文件 ,通过参数contextConfigLocation加载-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>cas-client3-springsercurity</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

</web-app>

第四步:创建登录成功后展示页面index.jsp,添加登录按钮。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>Hello World!</h2>
<a href="/logout/cas">退出登录</a>
</body>
</html>

第五步:创建退出成功后展示页面index2.jsp,注意这里的页面名字和spring-security.xml文件中的service重定向路径名字必须一致。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h4>退出成功</h4>
</body>
</html>

4.3. 创建Spring-security认证脚本

在路径com.demon.cas.service下创建UserDetailServiceImpl.java脚本,并继承UserDetailsService接口(注意这里的路径需要与上面配置文件中认证类路径一致)

/**
 * 认证类
 */
public class UserDetailServiceImpl implements UserDetailsService {
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        System.out.println("登录结果:" + username);
        //构建角色集合
        List<GrantedAuthority> authorities = new ArrayList();
        authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
        return new User(username, "", authorities);
    }
}

此时,在浏览器中输入访问地址ip:9092,会自动进入CAS登录页面,登录成功后,进入index.jsp页面。

4.4. 获取登录名

创建UserController.java脚本,添加springmvc相关注解,开放外部访问接口。

@RestController
public class UserController {

    @RequestMapping("/findLoginUser")
    public String  findLoginUser(){
        String name = SecurityContextHolder.getContext().getAuthentication().getName();
        return name;
    }
}

登录成功后,在浏览器地址栏输入localhost:9092/findLoginUser.do 即可在控制台看到输出的登录名。

文档下载地址:

https://wenku.baidu.com/view/3959da2a031ca300a6c30c22590102020740f2ff

上一篇下一篇

猜你喜欢

热点阅读