使用CAS实现单点登录功能
目录
- 单点登录
- 简介
- CAS服务器部署
- 上传tomcat服务器压缩到文件夹/usr/local/cas目录下,解压,修改tomcat文件夹名为tomcat
- 修改tomcat配置文件的端口号
- 关闭tomcat服务器,把CAS的war包放入tomcat的webapps目录当中后再启动tomcat服务器 对war包时行解压
- 关闭tomcat服务器后, 删除war包
- 监听启动
- 启动tomcat服务器
- 输入用户名casuser 密码:Mellon
- CAS使用
- 用户名和密码
- 数据源方法
- 修改Mysql远程访问权限
- 配置用户认证
- 自定义登录页面
- 添加主题名称
- 放入静态资源文件
- 创建mypage.properties文件
- 在/usr/local/cas/tomcat/webapps/cas/WEB-INF/classes/templates中创建文件夹mypage
- 把页面放进去
- 在application.properties当中添加主题
- 数据源方法
- 用户服务添加CAS
- 引入pom文件
- 在web.xml当中添加过滤器
- 添加配置文件spring/spring-security.xml
- 创建认证类
- 前端工程添加CAS
- 在web.xml当中添加过滤器
- 添加配置文件spring/spring-security.xml
- 创建认证类
- 用户名和密码
单点登录
简介
- 单点登录(Single Sign On),简称 SSO
- 简单来说,就是只要一次登录了某个子系统,就顺带登录了其他的子系统。
- 其目的很简单,就是为了减少用户访问子系统的成本。
CAS服务器部署
上传tomcat服务器压缩到文件夹/usr/local/cas目录下,解压,修改tomcat文件夹名为tomcat
mkdir /usr/local/cas cd /usr/local/cas
修改tomcat配置文件的端口号
关闭tomcat服务器,把CAS的war包放入tomcat的webapps目录当中后再启动tomcat服务器 对war包时行解压
关闭tomcat服务器后, 删除war包
/usr/local/cas/tomcat/bin/shutdown.sh rm -rf /usr/local/cas/tomcat/webapps/cas.war
监听启动
tail -f /usr/local/cas/tomcat/logs/catalina.out
启动tomcat服务器
/usr/local/cas/tomcat/bin/startup.sh
访问http://192.168.1.88:9100/cas/login
输入用户名casuser 密码:Mellon
CAS使用
去除https认证与设置cookie
?
?//关闭tomcat /usr/local/cas/tomcat/bin/shutdown.sh //修改参数 vi /usr/local/cas/tomcat/webapps/cas/WEB-INF/classes/services/HTTPSandIMAPS-10000001.json { "@class" : "org.apereo.cas.services.RegexRegisteredservice", "serviceId" : "^(https|http|imaps)://.*", "name" : "HTTPS and IMAPS", "id" : 10000001, "description" : "This service definition authorizes all application urls that support HTTPS and IMAPS protocols.", "evaluationorder" : 10000 } //添加参数 vi /usr/local/cas/tomcat/webapps/cas/WEB-INF/classes/application.properties cas.tgc.secure=false cas.serviceRegistry.initFromJson=true #配置允许登出后跳转到指定页面 cas.logout.followServiceRedirects=true #跳转到指定页面需要的参数名为 service cas.logout.redirectParameter=service //重启tomcat /usr/local/cas/tomcat/bin/startup.sh
用户名和密码
数据源方法
修改Mysql远程访问权限
create user user_cas identified with mysql_native_password by '123456'; grant all on *.* to 'user_cas'@'%'; FLUSH PRIVILEGES;
配置用户认证
将用户认证配置cas.authn.accept.users=casuser::Mellon注释掉 vi /usr/local/cas/tomcat/webapps/cas/WEB-INF/classes/application.properties #cas.authn.accept.users=casuser::Mellon #设置用户认证配置(根据实际情况配置数据源) cas.authn.jdbc.query[0].url=jdbc:mysql://192.168.1.2:3306/fmstore?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=false #根据实际情况配置 cas.authn.jdbc.query[0].user=user_cas #根据实际情况配置 cas.authn.jdbc.query[0].password=123456 cas.authn.jdbc.query[0].sql=select * from tb_user where username= ? cas.authn.jdbc.query[0].driverClass=com.mysql.cj.jdbc.Driver cas.authn.jdbc.query[0].fieldPassword=password cas.authn.jdbc.query[0].fieldExpired=expired #cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5
自定义登录页面
添加主题名称
- 在/usr/local/cas/tomcat/webapps/cas/WEB-INF/classes/service/HTTPSandIMAPS-10000001.json中添加"theme" : "mypage"
放入静态资源文件
- 把图片放到static/images当中
- js放到static/js当中
- css放到static/css当中
创建mypage.properties文件
? 在/usr/local/cas/tomcat/webapps/cas/WEB-INF/classes目录当中创建mypage.properties文件
#原cas默认的css样式,如果更改了,某些页面样式将丢失 cas.standard.css.file=/css/cas.css #自己的样式 cas.page.login.css=/css/pages-login.css cas.webbase.css=/css/webbase.css cas.jquery.easing.min.js=/js/jquery.easing.min.js cas.jquery.min.js=/js/jquery.min.js cas.jquery.placeholder.min.js=/js/jquery.placeholder.min.js cas.login.js=/js/login.js cas.sui.min.js=/js/sui.min.js cas.qq.png = /images/img/qq.png cas.weixin.png = /images/img/weixin.png
在/usr/local/cas/tomcat/webapps/cas/WEB-INF/classes/templates中创建文件夹mypage
把页面放进去
在application.properties当中添加主题
- cas.theme.defaultThemeName=mypage
用户服务添加CAS
引入pom文件
org.springframework.security spring-security-web org.springframework.security spring-security-config org.springframework.security spring-security-taglibs org.springframework.security spring-security-cas org.jasig.cas.client cas-client-core org.slf4j log4j-over-slf4j joda-time joda-time 2.10 在web.xml当中添加过滤器
contextConfigLocation classpath:spring/spring-security.xml org.springframework.web.context.ContextLoaderListener springSecurityFilterChain org.springframework.web.filter.DelegatingFilterProxy springSecurityFilterChain /* 添加配置文件spring/spring-security.xml
<?xml version="1.0" encoding="UTF-8"?>
创建认证类
/** * 自定义认证类: * 在之前这里负责用户名密码的校验工作, 并给给当前用户赋予对应的访问权限 * 现在cas和springSecurity集成, 集成后, 用户名密码的校验工作交给cas完成, 所以能够进入到 * 这里类的方法中的都是已经成功认证的用户, 这里只需要给登录过的用户赋予对应的访问权限就可以 */ public class UserDetailServiceImpl implements UserDetailsService { @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { //创建权限集合 List
authorityList = new ArrayList<>(); //向权限集合中加入访问权限 authorityList.add(new SimpleGrantedAuthority("ROLE_USER")); return new User(username, "", authorityList); } } 前端工程添加CAS
在web.xml当中添加过滤器
contextConfigLocation classpath:spring/spring-security.xml org.springframework.web.context.ContextLoaderListener springSecurityFilterChain org.springframework.web.filter.DelegatingFilterProxy springSecurityFilterChain /* 添加配置文件spring/spring-security.xml
<?xml version="1.0" encoding="UTF-8"?>
创建认证类
import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import java.util.ArrayList; import java.util.List; /** * 自定义认证类: * 在之前这里负责用户名密码的校验工作, 并给给当前用户赋予对应的访问权限 * 现在cas和springSecurity集成, 集成后, 用户名密码的校验工作交给cas完成, 所以能够进入到 * 这里类的方法中的都是已经成功认证的用户, 这里只需要给登录过的用户赋予对应的访问权限就可以 */ public class UserDetailServiceImpl implements UserDetailsService { @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { //创建权限集合 List
authorityList = new ArrayList<>(); //向权限集合中加入访问权限 authorityList.add(new SimpleGrantedAuthority("ROLE_USER")); return new User(username, "", authorityList); } }