全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解spring boot配置单点登录

概述

企业内部一般都有一套单点登录系统(常用的实现有apereo cas),所有的内部系统的登录认证都对接它。本文介绍spring boot的程序如何对接CAS服务。

常用的安全框架有spring security和apache shiro。shiro的配置和使用相对简单,本文使用shrio对接CAS服务。

配置

新增依赖

pom.xml新增:

<properties>
  <shiro.version>1.2.4</shiro.version>
 </properties>
<dependencies>
<!--Apache Shiro -->
  <dependency>
   <groupId>org.apache.shiro</groupId>
   <artifactId>shiro-spring</artifactId>
   <version>${shiro.version}</version>
  </dependency>
  <dependency>
   <groupId>org.apache.shiro</groupId>
   <artifactId>shiro-ehcache</artifactId>
   <version>${shiro.version}</version>
  </dependency>
  <dependency>
   <groupId>org.apache.shiro</groupId>
   <artifactId>shiro-cas</artifactId>
   <version>${shiro.version}</version>
  </dependency>
</dependencies>

spring boot配置

application.properties

shiro.cas=https://cas.xxx.com # 这是CAS服务的地址
shiro.server=http://127.0.0.1:8080 # 自己应用的地址,测试使用127即可

应用配置

初始化shiro bean,将文件放到任意子包下即可,比如xxx.config,spring boot会自动扫描加载

@Configuration
public class ShiroCasConfiguration {
 private static final String casFilterUrlPattern = "/shiro-cas";

 @Bean
 public FilterRegistrationBean filterRegistrationBean() {
  FilterRegistrationBean filterRegistration = new FilterRegistrationBean();
  filterRegistration.setFilter(new DelegatingFilterProxy("shiroFilter"));
  filterRegistration.addInitParameter("targetFilterLifecycle", "true");
  filterRegistration.setEnabled(true);
  filterRegistration.addUrlPatterns("/*");
  return filterRegistration;
 }

 @Bean(name = "lifecycleBeanPostProcessor")
 public LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() {
  return new LifecycleBeanPostProcessor();
 }

 @Bean(name = "securityManager")
 public DefaultWebSecurityManager getDefaultWebSecurityManager(@Value("${shiro.cas}") String casServerUrlPrefix,
                 @Value("${shiro.server}") String shiroServerUrlPrefix) {
  DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
  CasRealm casRealm = new CasRealm();
  casRealm.setDefaultRoles("ROLE_USER");
  casRealm.setCasServerUrlPrefix(casServerUrlPrefix);
  casRealm.setCasService(shiroServerUrlPrefix + casFilterUrlPattern);
  securityManager.setRealm(casRealm);
  securityManager.setCacheManager(new MemoryConstrainedCacheManager());
  securityManager.setSubjectFactory(new CasSubjectFactory());
  return securityManager;
 }

 private void loadShiroFilterChain(ShiroFilterFactoryBean shiroFilterFactoryBean) {
  Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();

  filterChainDefinitionMap.put(casFilterUrlPattern, "casFilter");
  filterChainDefinitionMap.put("/login", "anon");
  filterChainDefinitionMap.put("/bower_components/**", "anon");//可以将不需要拦截的静态文件目录加进去
  filterChainDefinitionMap.put("/logout","logout");
  filterChainDefinitionMap.put("/**", "authc");
  shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
 }

 /**
  * CAS Filter
  */
 @Bean(name = "casFilter")
 public CasFilter getCasFilter(@Value("${shiro.cas}") String casServerUrlPrefix,
         @Value("${shiro.server}") String shiroServerUrlPrefix) {
  CasFilter casFilter = new CasFilter();
  casFilter.setName("casFilter");
  casFilter.setEnabled(true);
  String loginUrl = casServerUrlPrefix + "/login?service=" + shiroServerUrlPrefix + casFilterUrlPattern;
  casFilter.setFailureUrl(loginUrl);
  return casFilter;
 }

 @Bean(name = "shiroFilter")
 public ShiroFilterFactoryBean getShiroFilterFactoryBean(DefaultWebSecurityManager securityManager,
               CasFilter casFilter,
               @Value("${shiro.cas}") String casServerUrlPrefix,
               @Value("${shiro.server}") String shiroServerUrlPrefix) {
  ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
  shiroFilterFactoryBean.setSecurityManager(securityManager);
  String loginUrl = casServerUrlPrefix + "/login?service=" + shiroServerUrlPrefix + casFilterUrlPattern;
  shiroFilterFactoryBean.setLoginUrl(loginUrl);
  shiroFilterFactoryBean.setSuccessUrl("/");
  Map<String, Filter> filters = new HashMap<>();
  filters.put("casFilter", casFilter);
  LogoutFilter logoutFilter = new LogoutFilter();
  logoutFilter.setRedirectUrl(casServerUrlPrefix + "/logout?service=" + shiroServerUrlPrefix);
  filters.put("logout",logoutFilter);
  shiroFilterFactoryBean.setFilters(filters);

  loadShiroFilterChain(shiroFilterFactoryBean);
  return shiroFilterFactoryBean;
 }
}

程序中获取登录的用户名

上述配置完成后,就可以找程序中获取登录用户的名字了

public String getUsername() {
  Subject subject = SecurityUtils.getSubject();
  if (subject == null || subject.getPrincipals() == null) {
   return DEFAULTUSER;
  }
  return (String) subject.getPrincipals().getPrimaryPrincipal();
 }

总结

shiro使用还是比较简单的,使用的时候只需要修改application.properties即可

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# spring  # boot  # 单点登录  # 配置单点登录  # 基于SpringBoot+Redis的Session共享与单点登录详解  # 使用Spring Security OAuth2实现单点登录  # SpringCloud实现SSO 单点登录的示例代码  # vue+springboot前后端分离实现单点登录跨域问题解决方法  # spring boot整合Shiro实现单点登录的示例代码  # spring boot 1.5.4 集成shiro+cas  # 实现单点登录和权限控制  # spring session同域下单点登录实现解析  # 单点  # 这是  # 都有  # 只需要  # 将不  # 大家多多  # 就可以  # 加载  # 完成后  # bean  # 子包下  # Configuration  # public  # config  # java  # server  # strong  # xxx  # http  # setFilter 


相关文章: 建站中国官网:模板定制+SEO优化+建站流程一站式指南  香港网站服务器数量如何影响SEO优化效果?  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站之星Pro快速搭建教程:模板选择与功能配置指南  如何通过cPanel快速搭建网站?  javascript中的try catch异常捕获机制用法分析  如何在Ubuntu系统下快速搭建WordPress个人网站?  网站制作话术技巧,网站推广做的好怎么话术?  成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?  重庆网站制作公司哪家好,重庆中考招生办官方网站?  北京建设网站制作公司,北京古代建筑博物馆预约官网?  如何自定义建站之星网站的导航菜单样式?  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  如何快速搭建响应式可视化网站?  如何在宝塔面板中修改默认建站目录?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  建站之星导航如何优化提升用户体验?  网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?  建站主机无法访问?如何排查域名与服务器问题  b2c电商网站制作流程,b2c水平综合的电商平台?  高性价比服务器租赁——企业级配置与24小时运维服务  C++中引用和指针有什么区别?(代码说明)  如何有效防御Web建站篡改攻击?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  如何在万网开始建站?分步指南解析  深圳 网站制作,深圳招聘网站哪个比较好一点啊?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  建站168自助建站系统:快速模板定制与SEO优化指南  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  无锡营销型网站制作公司,无锡网选车牌流程?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  如何通过服务器快速搭建网站?完整步骤解析  教学论文网站制作软件有哪些,写论文用什么软件 ?  如何在建站之星网店版论坛获取技术支持?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  家具网站制作软件,家具厂怎么跑业务?  北京制作网站的公司,北京铁路集团官方网站?  网站制作需要会哪些技术,建立一个网站要花费多少?  如何选择高效响应式自助建站源码系统?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  建站之星备案流程有哪些注意事项?  如何用5美元大硬盘VPS安全高效搭建个人网站?  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  建站主机默认首页配置指南:核心功能与访问路径优化  建站之星如何一键生成手机站?  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  建站之星会员如何解锁更多建站功能?  建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。