1. CAS单点登录介绍
1.1. 什么是单点登录
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
我们目前的系统存在诸多子系统,而这些子系统是分别部署在不同的服务器中,那么使用传统方式的session是无法解决的,我们需要使用相关的单点登录技术来解决。
image1.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 最基本的协议过程:
imageSSO单点登录访问流程主要有以下步骤:
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字段值,如下:
image2.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
网友评论