CAS配置客户端

所需依赖

<!-- https://mvnrepository.com/artifact/org.jasig.cas.client/cas-client-core -->
<dependency>
    <groupId>org.jasig.cas.client</groupId>
    <artifactId>cas-client-core</artifactId>
    <version>3.5.0</version>
</dependency>

web.xml配置

在客户端的web.xml里配置过滤器,根据添加的过滤器的位置顺序介绍

Cas20ProxyReceivingTicketValidationFilter(必需)
该过滤器负责对ticket的校验工作,这个过滤器要放在第一个位置。casServerUrlPrefix:cas服务器访问地址,serverName:客户端域名和端口。这里也可以配置成ip,但是最好还是配置成域名。
还有就是cas服务端我取消了https,这里路径注意一下。

<!-- 该过滤器配置负责对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>http://www.mycas.com:8088/cas-server-webapp-3.5.2</param-value>
    </init-param>
    <init-param>
      <param-name>serverName</param-name>
      <param-value>http://127.0.0.1:80/</param-value>
    </init-param>
    <init-param>
      <param-name>renew</param-name>
      <param-value>false</param-value>
    </init-param>
    <init-param>
      <param-name>gateway</param-name>
      <param-value>false</param-value>
    </init-param>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CAS Validation Filter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

AuthenticationFilter(必需)
该过滤器负责用户的认证工作,casServerLoginUrl:cas服务端登录地址(注意这里比上面的多了’/login’),serverName:同上

<!--该过滤器负责用户的认证工作-->
  <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>http://www.mycas.com:8088/cas-server-webapp-3.5.2/login</param-value>
    </init-param>
    <init-param>
      <param-name>serverName</param-name>
      <param-value>http://127.0.0.1:80/</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CASFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

HttpServletRequestWrapperFilter (可选)与 AssertionThreadLocalFilter(可选)

<!--HttpServletRequestWrapperFilter-->
<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>  

  <!--AssertionThreadLocalFilter-->
  <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>

这2个过滤器的功能是一样的,所以放到一起来讲,当我们登录成功后,需要获取登录的用户信息(只能获取到用户名),就需要配置上面2个过滤器的其中一个。获取方式如下:
HttpServletRequestWrapperFilter :

1 HttpServletRequest request2 = (HttpServletRequest) request;
2 // 从Cas服务器获取登录账户的用户名(2种方式)
3 String username1 = request2.getUserPrincipal().toString();
4 String username2 = request2.getRemoteUser();

AssertionThreadLocalFilter:

1 Assertion assertion = AssertionHolder.getAssertion();
2 String username3 = assertion.getPrincipal().getName();

问题1

报错:Renew MUST be specified via context parameter or JNDI environment to avoid misconfiguration.
将Cas20ProxyReceivingTicketValidationFilter中的

<init-param>
      <param-name>renew</param-name>
      <param-value>false</param-value>
</init-param>

修改为

<context-param>
        <param-name>renew</param-name>
        <param-value>false</param-value>
</context-param>

问题2

报错
这里写图片描述
未认证授权的服务
CAS的服务记录是空的,没有定义服务。 希望通过CAS进行认证的应用程序必须在服务记录中明确定义。
因为没有定义客户端的服务,要进行以下设置
1 在application文件中必须设置(默认是false)

cas.serviceRegistry.initFromJson=true

2 如果你还有以http或其他协议进行访问的客户端,还要设置 \WEB-INF\classes\services\HTTPSandIMAPS-10000001.json

"serviceId" : "^(https|imaps)://.*" 中添加http后:
"serviceId" : "^(https|imaps|http)://.*",

问题3

这里写图片描述
未认证授权的服务
不允许使用CAS来认证您访问的目标应用。
因为你访问的客户端项目使用的协议没有加入到cas认证中,请添加使用的协议即可;可参考问题2

问题4

如何限制某些客户端接入?
同问题2,3一样
在resources/services下新建文件Pointservice-10000002.json

注意:json文件名字规则为${name}-${id}.json, id必须为json文件内容id一致
json文件解释:
•@class:必须为org.apereo.cas.services.RegisteredService的实现类,对其他属性进行一个json反射对象,常用的有RegexRegisteredService,匹配策略为id的正则表达式
•serviceId:唯一的服务id
•name: 服务名称,会显示在默认登录页
•id:全局唯一标志
•description:服务描述,会显示在默认登录页
•evaluationOrder: 匹配争取时的执行循序(越小越优先)
•theme:主题,默认是apereo
除了以上说的还有很多配置策略以及节点,具体看官方文档,配置不同的RegisteredService也会有稍微不一样

{
  "@class": "org.apereo.cas.services.RegexRegisteredService",
  "serviceId": "^(https|imaps)://www.pointservice.com.*",
  "name": "指定的服务1",
  "id": 10000002,
  "description": "这是一个本地允许的服务,通过localhost访问都允许通过",
  "evaluationOrder": 1
}

猜你喜欢

转载自blog.csdn.net/qq_17348297/article/details/80651149