CAS与Spring的集成

Jasig cas 单点登录系统Server&Java Client配置 Jasig cas(Central Authentication Service)官方站点:http://www.jasig.org/cas,访问这个站点需要翻墙。 我下载的是:3.5.2版本,当前是最新release版本,只能运行在jdk6下,在jdk7下不能运行。 本篇介绍了Jasig cas的单点登录、单点登出的配置和原理,它是一个只负责认证的系统,关于授权,还是要业务系统自己来做。 阅读详情

简介

CAS项目官网 是一款开源的单点登录解决方案,可以直接再Tomcat,Jetty等WEB容器上运行,支持多种开发语言

下载

下载cas-server-XXX-release.zip(地址)

注意:官网提供的所有版本中,最新的版本(4.0以上)可能没有release.zip包

修改tomcat

创建秘钥

生成keypair

在 $JRE_HOME/bin/ 目录下创建命令行,输入以下命令,其中CN的值必须保持和主机名一致,假设密码为 mypass,再继续填写信息,遇到主密码直接回车

keytool -genkeypair -alias cas -keyalg RSA -storepass mypass

上述命令会在用户目录下生成一个.keystore文件,后面会使用该文件其他的几个常用命令

# 查看 keypair:
keytool -list -storepass mypass
# 删除 keypair:
keytool -delete -alias <别名> -storepass mypass

导出证书

keytool -exportcert -alias cas -file cas.crt -storepass mypass

上述命令会在当前目录生成一个cas.crt证书文件,后面也会使用该文件

向JVM导入证书

keytool -importcert -alias cas -file cas.crt -keystore "%JAVA_HOME%\jre\lib\security\cacerts" -storepass mypass -noprompt

上面的JAVA_HOME需要换成实际的路径

配置tomcat

修改配置文件

不同版本的cas对jdk版本的要求不一样,请查阅cas说明

修改tomcat目录下的conf/server.xml,打开SSL

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
配置HTTPS端口
<Connector    port="8443" 
              protocol="org.apache.coyote.http11.Http11Protocol" 
              SSLEnabled="true"
              maxThreads="150" 
              scheme="https" 
              secure="true"
              clientAuth="false" 
              sslProtocol="TLS" 
              keystoreFile="apache-tomcat-7.0.73\conf\security\.keystore"
              keystorePass="mypass"/>

如果要确保访问HTTPS服务只能用8443端口,则需要禁用其他端口号

访问cas服务

重启tomcat: 在 tomcat/bin/ 下先执行 shutdown,再执行 startup。访问cas的地址为 https://localhost:8443/cas/login

WEB集成CAS-CLIENT

在Spring服务的pom.xml加入cas-client的依赖包

 <!--cas client-->
 <dependency>
     <groupId>org.jasig.cas.client</groupId>
     <artifactId>cas-client-core</artifactId>
     <version>3.3.3</version>
 </dependency>

在Spring的项目配置文件web.xml中加入cas的配置

 <!-- ======================== 单点登录开始 ======================== -->
 <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>

 <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://nkgy4l003835331:8443/cas/login</param-value>
         <!-- 这里只能使用主机名的url -->
     </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.Cas20ProxyReceivingTicketValidationFilter</filter-class>
     <init-param>
         <param-name>casServerUrlPrefix</param-name>
         <param-value>https://nkgy4l003835331:8443/cas</param-value>
         <!-- 这里只能使用主机名的url -->
     </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登录用户的登录名,可选配置。
 -->
 <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>

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

同一个Tomcat下部署CAS-Server和Spring Web需要在tomcat的server.xml中创建两个Service

  <!-- 用于HTTP应用 -->
  <Service name="Catalina"> 
  </Service>
  
  <!-- 用于CAS的HTTPS应用 -->
  <Service name="Catalina.cas">
  </Service>

将HTTPS的移动到Catalina.cas中,并配置context的path路径cas的包路径

  <Service name="Catalina.cas">
  <Connector port="8443" 
            protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
            maxThreads="150" scheme="https" secure="true"
            clientAuth="false" sslProtocol="TLS"
            keystoreFile="F:\software\apache-tomcat-7.0.73-windows-x64\apache-tomcat-7.0.73\conf\security\keystore.jks"
            keystorePass="changeit"/>
  <Engine name="Catalina.cas" defaultHost="localhost">
  <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="false" deployOnStartup="false">
   <Context path="/cas" docBase="cas" reloadable="false" />

配置HTTP的context

与上一步类似,context的path填WEB项目的地址

CAS连接数据库

复制cas下载包中的 cas-server-support-jdbc-*.jar 到 tomcat/webapps/cas/WEB-INF/lib 中
复制数据库驱动包(如 mysql-connector.jar )到 tomcat/webapps/cas/WEB-INF/lib 中

  • 修改cas配置文件: 在 tomcat/webapps/cas/WEB-INF/cas.properties 中加入以下数据库的配置
  # == Basic database connection pool configuration ==
  database.driverClass=com.mysql.jdbc.Driver
  database.url=jdbc:mysql://127.0.0.1:3306/test
  database.user=root 
  database.password=root
  • 修改 tomcat/webapps/cas/WEB-INF/deployerConfigContext.xml 配置

    • 注册dataSource的bean
     <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource"
        p:driverClassName="${database.driverClass}"
        p:url="${database.url}"
        p:username="${database.user}"
        p:password="${database.password}">
      </bean>
    • 注册密码加密的bean,这里的bean的实现类可以是自定义的加密类,只要实现encode方法就可以
      // 以下使用cas自带的加密类
      <bean id="md5PasswordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
          <constructor-arg index="0">
              <value>MD5</value>
          </constructor-arg>
      </bean>
    • 注释默认的校验规则bean,默认判断用户名和密码相等即可
    <!-- <bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" /> -->
    • 在上述注释后面添加新的校验bean,注意sql的值要完全和设计的登陆表对应
      <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
          <property name="dataSource" ref="dataSource"></property>
          <property name="sql" value="select password from tb_user where account=?"></property>
          <property name="passwordEncoder" ref="md5PasswordEncoder"></property>
      </bean>

重启tomcat重新登陆

CAS自定义登陆页面

CAS的登陆页jsp文件在 tomcat/webapps/cas/WEB-INF/view/jsp/default/ui/casLoginView.jsp

修改注意事项

  • 可以自由定义样式和脚本
  • 要引入静态资源,需要将被引入的文件放在 tomcat/webapps/cas 目录下的位置,可以参考 tomcat/webapps/cas/css ,引用代码示例:
<link href="/css/login.css" rel="stylesheet" type="text/css">

保持以下内容完整,因为以下内容会将值传给login请求

<form:form method="post" id="fm1" cssClass="fm-v clearfix" commandName="${commandName}" htmlEscape="true">
<input type="hidden" name="lt" value="${loginTicket}" />
<input type="hidden" name="execution" value="${flowExecutionKey}" />
<input type="hidden" name="_eventId" value="submit" />
<form:input id="username" .../>
<form:password id="password" .../>

原有的控件具有友好的功能,可以适当考虑保留和优化,如下面是登陆失败提示凭证错误的控件
<form:errors path="*" id="msg" cssClass="errors" element="div" />
保存文件,刷新浏览器即可

CAS加入注册功能(扩展:其他任意功能)

在CAS Server上添加注册功能

CAS本身不具有注册功能,因为CAS要开放注册业务给其他业务系统,CAS单一负责登陆校验和会话管理

修改步骤

在 tomcat/webapps/cas/WEB-INF/view/jsp/default/ui/中加入注册页的jsp文件,如casRegisterView.jsp,传入参数为username和password
在 tomcat/webapps/cas/WEB_INF/classes/default_views.properties 中添加注册页的view映射

  • 添加注册页

    • casRegisterView.(class)=org.springframework.web.servlet.view.JstlView
    • casRegisterView.url=/WEB-INF/view/jsp/default/ui/casRegisterView.jsp
  • 创建注册控制类RegisterController.java,输入以下代码
 package x.y.z;
 import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.mvc.AbstractController;

 //必须继承AbstractController控制器基础类
 public class RegisterController extends AbstractController
 {
      private DatabaseHandler dataHandler;//数据库处理类(bean注入)
      
      // 必须实现的方法
      protected ModelAndView handleRequestInternal(HttpServletRequest request,
                  HttpServletResponse response) throws Exception
      {
          ModelAndView signinView=new ModelAndView();
          String username=request.getParameter("username");
          String password=request.getParameter("password");
          if(username == null || username.equals("") || password == null || password.equals("")){
              return new ModelAndView("casRegisterView");
          }
          boolean success = this.dataHandler.insertUser(username,password);
          String viewName=getSignInView(request);
          signinView.setViewName(viewName);
          return signinView;
      }
      // 处理跳转url
      protected String getSignInView(HttpServletRequest request) {
          String service = ServletRequestUtils.getStringParameter(request, "service", "");
          return ("redirect:login" + (service.length() > 0 ? "?service=" + service : ""));
      }
      // 开放设置dataHandler,用于bean注入
      public void setDataHandler(DatabaseHandler handler){
         this.dataHandler = handler;
      }
 }
  • 创建数据库实现类DatabaseHandler.java,输入以下代码
 package x.y.z;
 import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
 import javax.sql.DataSource;
 
 class DatabaseHandler{
     // 数据库操作模板类
     private SimpleJdbcTemplate jdbcTemplate;
     // 数据源
     private DataSource dataSource;
     // 自定义方法,示例为插入一个新用户
     public boolean insertUser(String username,String password){
       int r = 0;
       try {
         r = this.jdbcTemplate.update("insert into tb_user(account,password,time) values(?,?,?)",username,password,System.currentTimeMillis()/1000);
       }catch (Exception e){
         e.printStackTrace();
         return false;
       }
       return r > 0;
     }
     //设置datasource注入
     public final void setDataSource(final DataSource dataSource) {
         this.jdbcTemplate = new SimpleJdbcTemplate(dataSource);
         this.dataSource = dataSource;
     }
 }
  • 将3-4的两个java文件打包成jar文件,并最终放到 tomcat/webapps/cas/WEB-INF/lib 中

    • 第一步: 编译java文件
      # 由于java文件中引用了其他类,所以需要用 -cp 链接jar包
      javac -cp "tomcat/webapps/cas/WEB-INF/lib/*" RegisterController.java.java
      javac -cp "tomcat/webapps/cas/WEB-INF/lib/*" DatabaseHandler.java.java
    • 第二步: 打包成jar包
      # 可以将两个文件打包在一起,也可以分开打包。例如打包在一起,名字取为my-register.jar
      # @注意: 由于3-4创建的java文件包含package 值,所以用jar打包时必须将class文件放在当前目录下的package子目录下,例如当前目录下的 x/y/z/目录下
      jar cvf my-register.jar x/y/z/*.class
  • 修改 tomcat/webapps/cas/WEB-INF/cas-servlet.xml 文件配置

    • 注册dataHandler的bean
      <bean id="dataHandler" class="com.cas.luodong.web.DatabaseHandler">
          <property name="dataSource" ref="dataSource"></property>
      </bean>
    • 注册registerController的bean
      <bean id="registerController" class="com.cas.luodong.web.RegisterController"
              p:dataHandler-ref="dataHandler"/>
              
    • 在 <bean id="handlerMappingC" 的props中加入以下内容
      <prop key="/register">registerController</prop>
    修改 tomcat/webapps/cas/WEB-INF/web.xml 文件配置
    • 加入servlet-mapping项
      <servlet-mapping>
          <servlet-name>cas</servlet-name>
          <url-pattern>/validate</url-pattern>
      </servlet-mapping>

重启tomcat,访问 cas/register 可以看到结果

FQA

  • java.lang.IllegalArgumentException: casServerUrlPrefix cannot be null

解决办法: cas-client-core的版本3.4.1不支持RC5,改为3.3.3即可

  • java.security.cert.CertificateException: No name matching localhost found

解决办法: jdk生成证书时填写的CN值必须为当前主机的主机名

  • java.security.cert.CertificateException: No subject alternative names present

解决办法: web.xml中的 casServerLoginUrl 和 casServerUrlPrefix 不能使用ip,必须使用CN值

  • CAS is Unavailable ; There was an error trying to complete your request. Please notify your support desk or try again.

解决办法: 检查ui下的jsp文件是否有误,确认标签匹配正确


CAS客户端集成gateway 简介 CAS提供的客户端是基于Servlet写的,也就是说我们如果使用非Servlet应用,那么客户端是无法继承的,项目中使用没有使用Zuul来作为网关,而是使用Gateway,所以我们需要将原有的逻辑迁移到Gateway上 实现思路 根据查询原有客户端我们可以发现,客户端本质是一些Servlet拦截器,在拦截器中对登录和验证进行各种逻辑,而Gateway也提供了拦截器GlobalFilter,所... 阅读详情

相关推荐

spring boot 集成cas(一) 服务端搭建

简单点就是统一服务认证,多个系统一次登录。俗称单点登录。

慕孑晨的博客 1956

SpringBoot集成CAS单点登录Client

SpringBoot集成CAS单点登录Client,主要适用于前后端分离项目的架构模式

程序员阿华的博客 2560

16.Spring Boot 使用Spring security 集成CAS

在上一篇中说了Spring Boot 使用Spring security,在这一篇中将讲讲Spring security 集成CAS。

编码语言Codelang 4万+

jasig CAS客户端配置

cas客户的配置及出现org.xml.sax.SAXParseException; lineNumber: 64; columnNumber: 23; 元素类型 "label" 必须由匹配的结束标记 "</label>" 终止,错误处理!

态度决定思路,思路决定出路!!! 4821

spring boot 集成 cas

首先我这边 <spring.boot.version>2.2.10.RELEASE</spring.boot.version> 这是spring boot的版本 然后就是cas版本 <!-- https://mvnrepository.com/artifact/net.unicon.cas/cas-client-autoconfig-support --> <!-- cas客户端--> <dependency> &

Free1314XiaoSuYu的博客 5205

单点登录(SSO)解决方案之 CAS客户端与Spring Security集成

单点登录(SSO)解决方案之 CAS客户端与Spring Security集成 接上篇:单点登录(SSO)解决方案之 CAS服务端数据源设置及页面改造 Spring Security   Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中...

这里将承载一段最初的记忆 867

CAS和Shiro在spring中集成

shiro是权限管理框架,现在已经会利用它如何控制权限。为了能够为多个系统提供统一认证入口,又研究了单点登录框架cas。因为二者都会涉及到对session的管理,所以需要进行集成。   Shiro在1.2.0的时候提供了对cas的集成。因此在项目中添加shiro-cas的依赖            org.apache.shiro       shiro-cas        ${s

时光在路上 1万+

如何把Excel的数据导入python?

Python数据分析——excl导入数据的简单方法(xlrd) 本文的初衷是发现网上很多Excel导入Python都没有结合具体Excel文档进行讲解,所以这篇文档将会呈现一个简单快速的Excel+Python的入门方法。 开发环境 Prerequisites: 在开始用Python导入Excel之前,要配置好自己的开发环境,最好有IDE(terminal也可)+安装相应的数据分析包。 IDE :pycharm,vscode,etc 数据分析包:matplotlib,xlrd,numpy,etc 导入数

qq_40783513的博客 7万+

Spring Boot CAS 集成

最近项目中需要单点登录到其他系统,单点登录的服务校验用的是CAS,所以在网上查找了很多资料,最后结合前辈们的精华,终于搞定了,但是为了不让大家过多的去寻找资料汇总,我这边写一篇从安装到集成的,希望大家看到这篇文章就可以对CAS有个大体上了解,写的不好请大家不要喷我谢谢。 先看一下具体操纵流程(我这边使用的是REST方式进行对接CAS的)因为我的项目是老项目,...

cdszdd 1569

Kaggle | 总奖池超200万美金的数学竞赛AIMO2冠军方案

••••结论1:通过结合高质量大规模数据集、工具集成推理和生成式选择方法,可以构建在挑战性数学问题上达到最先进水平的语言模型。本文的方法在 AIMO-2 竞赛中的胜利以及在多个数学基准上的 SOTA 结果验证了这一策略的有效性。结论2:发布 OpenMathReasoning 数据集、OpenMath-Nemotron 模型和代码是社区的宝贵财富。

hxshine的博客 1197

【spark源码修改】hive3.1.3 spark3.5.4编译,需要修改源码,最终编译成功

【spark源码修改】hive3.1.3 spark3.5.4编译,需要修改源码,最终编译成功,附带问题分析详细过程

spark_dev的博客 1912

CAS Clients 集成 Spring Security

CAS Clients概述 CAS客户端也是可以与各种软件平台和应用程序集成的软件包,以便使用或者更多支持的协议与CAS服务器通信。已经开发了支持许多软件平台和产品的CAS客户。 官方客户 .NET CAS客户端 Java CAS客户端 PHP CAS客户端 Apache CAS客户端 其他客户 其他非官方或孵化的CAS客户可以在这里找到。鉴于上述项目是非官方的,不受CAS的直接维护...

大强博客 848

决策大模型与生成式大模型有何不同?一文拆解技术框架与落地路径

大模型技术正从内容生成走向复杂场景的智能决策。与生成式大模型拟合概率分布不同,决策大模型以序列决策为核心,融合强化学习机制,在动态环境中感知反馈、持续修正行动路径。其技术框架涵盖语义理解、规划推理与闭环决策,并通过世界模型进行低成本仿真推演,显著提升供应链调度、物流排程等场景的应对效率。实际落地时需结合传统优化算法与人工兜底,构建“语义先导+数值寻优”的分层架构,才能平衡精度与稳定性。这篇内容拆解决策大模型的技术组成、落地路径与常见误区,为企业智能化转型提供可参考的实践框架。

weixin_29057163的博客 189

spring security与cas 集成(中)

上一篇对于spring security与cas集成中涉及的名词,认证与授权进行简单说明,现在将spring security与cas集成的配置文件简单贴上来,这其中所需要的jar太多了,主要涉及cas client 3.1,spring security 3.2, spring security-cas client,spring 3.2这几类jar包。 主要配置如下: web.xm

snoopy 9899

西红柿成熟度检测数据集总结

成熟度类别标注数量semiripe(半成熟)10275rotten(腐烂)13470fullyripe(完全成熟)35031unripe(未成熟)26212。

crz1336768325的博客 2125

14、X射线图像处理与特征提取全解析

本文全面解析了X射线图像处理与特征提取的关键技术,涵盖图像预处理、滤波、边缘检测、分割与恢复等流程,并深入探讨了几何特征(如面积、周长、圆度、椭圆拟合)、强度特征(均值、方差、对比度)、傅里叶描述符、不变矩(Hu矩、Gupta矩)以及局部描述符(SIFT、SURF)和稀疏表示方法。同时介绍了特征选择的过滤法、包装法和嵌入法,并结合Matlab代码示例展示了各类特征的实际提取过程。文章最后总结了当前技术的应用现状,并展望了深度学习在X射线图像分析中的未来潜力。

pz89012345的博客 134

spring security 集成cas

pom.xml增加 security.xml <!-- 指定登录入口为casEntryPoint --> <http auto-config="true" use-expressions="true" entry-point-ref="casEntryPoint"> <custom-filter ref="casAuthenticationFilter" position="CA

qq_37001186的博客 882

浅谈银行内部户治理

为避免该问题的发生,对内部户入账类交易,或内部户是可透支的账户(如系统间往来),可考虑通过异步方式更新账户余额(当然,根本上还是要考虑银行业务量的实际,异步消息接口很多时候没有同步接口方便),另外,在进行内部户余额更新时,可以通过定时的借贷方发生额轧差的方式,将多次的锁请求,简化为一次(当然,发生额明细本身在加工账户交易历史时,是不能汇总的)。内部户在银行系统中,属于业务属性较少,实现相对简单,原理也很容易讲清的系统,但管中窥豹,越是基础的东西,越能看出一家银行业务、内控的专业程度。

银行信息系统应用架构详解 790

Spring security集成CAS

什么是Spring security? Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IOC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用...

韦军辉 1016

【Unity】RPG2D龙城纷争(十九)流程与UI界面(终章)

本章为RPG2D系列的终章,在之前的章节中我们已经完成了游戏的所有基本功能,那么用流程与UI界面将其串联起来才是我们整个游戏原型完善的标志。

神码编程 917

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

4) Spring Boot + Spring Security集成CAS

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。最新整理面试题上述的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题最新整理电子书最新整理大厂面试文档以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。最新整理面试题。

2401_85819318的博客 772

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

推荐文章:Spring Security CAS Starter - 简化CAS集成的Spring Boot利器

推荐文章:Spring Security CAS Starter - 简化CAS集成的Spring Boot利器 项目介绍 在现代应用开发中,安全性始终是开发者关注的重点。Spring Security CAS starter 是一个开源项目,旨在简化在Spring Boot应用中集成CAS(Central Authentication Service)单点登录系统的流程。该项目通过提供一个Spr...

gitblog_00531的博客 498

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

spring security 集成cas实现单点登录

最近接了一个任务,公司之前为客户做了很多的系统,后面做成了通用的业务系统准备向外销售,因此需要做一个演示系统将所有业务系统都放到演示系统中,用户在演示系统登录后可以访问其中的任意业务系统,这一听就是一个单点登录的需求啊,因此就去了解了下,发现了CAS, CAS是中央认证服务Central Authentication Service的简称。最初由耶鲁大学的Shawn Bayern 开发,后由Jasig社区维护,经过十多年发展,目前已成为影响最大、广泛使用的、基于Java实现的、开源SSO解...

luhaichuan88的博客 2667

推荐文章:基于Spring Boot的CAS客户端集成 - cas-client-boot-demo

推荐文章:基于Spring Boot的CAS客户端集成 - cas-client-boot-demo 在当今企业级应用开发中,安全认证已成为不可或缺的一环。单点登录(Single Sign-On, SSO)解决方案如Central Authentication Service (CAS) 获得了广泛的应用,它简化了用户验证过程,提高了用户体验。今天,我们要向大家推荐一个精巧实用的开源项目 —— c...

gitblog_00690的博客 523
上一篇: SpringCloud Feign对Hystrix(断路由)的支持
下一篇: json-lib——JsonConfig详细使用说明
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值