---------------------------------------------01-------02-----------------------------------------------------------------------------
cas就是用户的登陆界面。
-----------------------------------------------03----------------------------------------------------------------------------------
交互的细节:结合文档去分析:
票据:一个票据可以进许多小景点的通票。
-----------------------------------------------04----------------------------------------------------------------------------------
cas服务端的部署:
第一步:将这个war包扔到tomcat里面。
或者这个:
docker语句:放在130虚拟机里面的docker。
访问:
注意1是外部的2是内部的。
访问:http://192.168.244.130:8888/cas/login
初始的用户名和密码是:casuser Mellon
注:部署到docker不是很方便所以改为部署到本地。
放在这里:
查看配置文件:这里
加一行:
-----------------------------------------------05----------------------------------------------------------------------------------
cas服务端的配置:
第一步:改端口,修改tomcat的端口号
第二步:修改这个重启:
第三步:去除https的认证。
浏览器关闭打开存3600秒
不对接起不到一次登陆到处运行的效果/
-----------------------------------------------06----------------------------------------------------------------------------------
客户端入门小demo。
主要是这个web.xml
web.xml解释1:
<!-- 该过滤器负责用户的认证工作,必须启用它 -->
//cas包引入的jar包里面的
<filter>
<filter-name>CASFilter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>//服务端的登陆url,跳转的地址,重定向地址
<param-name>casServerLoginUrl</param-name>
<param-value>http://localhost:9100/cas/login</param-value>
<!--这里的server是服务端的IP -->
</init-param>
<init-param>//本身当前应用的根地址,请求的话也会把地址传给cas服务端,登陆之后再次跳回来。
<param-name>serverName</param-name>
<param-value>http://localhost:9001</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
web.xml解释2:票据验证过滤器。
<!-- 该过滤器负责对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>//cas服务端的地址
<param-value>http://localhost:9100/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://localhost:9001</param-value>//本身的地址
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Validation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
web.xml解释3:单点登出过滤器。
web.xml解释4:当前应用获取sso登陆的用户名。
web.xml解释2:当前应用获取sso登陆的用户名。
这个事cas的原生的方式的。
写个jsp页码测试效果。
--
同理创建demo2和demo3
----
测试:
访问9001:跳转到cas的登陆界面
登陆之后跳回到index.jsp。
访问9002:
-----------------------------------------------07----------------------------------------------------------------------------------
单点登出:
第一步:改cas的配置文件
重启。
-----------------------------------------------08----------------------------------------------------------------------------------
实际是在数据库中读取的。
我们要连的数据库是192.168.244.130的pinyougoudb。
登陆的表是tb_uesr。
我们看下配置文件:
在这个bean取出用户名和密码:
需要在这个配置文件中加3个bean。
第一个Bean:数据库改为本地的了。
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
p:driverClass="com.mysql.jdbc.Driver"
p:jdbcUrl="jdbc:mysql://192.168.244.136:3300/pinyougoudb?characterEncoding=utf8"
p:user="root"
p:password="123456" />
第二个Bean:注意这个sql。根据用户名把密码查出来。
<bean id="dbAuthHandler"
class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"
p:dataSource-ref="dataSource"
p:sql="select password from tb_user where username = ?"
p:passwordEncoder-ref="passwordEncoder"/>
第三个bean:密码加密的适配器。
<bean id="passwordEncoder"
class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"
c:encodingAlgorithm="MD5"
p:characterEncoding="UTF-8" />
下一步:
替换掉这个:
结果:
最后很重要的一步,添加jar包。
重启:测试
登陆:http://localhost:9100/cas/login
zhubajie 123123
-----------------------------------------------09----------------------------------------------------------------------------------
登陆的界面的改造:
换登陆界面:
第一步:
里面是登陆和登出的界面:
第二步:换掉
第三步:复制一个代码
第四步:测试是否更换成功
第五步:将其他的css等资源放在根目录下。
第六步:再次修改文件
第七步:换掉两个框
这回一样了。
换登陆:
----------------------------------------------------------10---------------------------------------------------------------
登陆的错误信息:就是输入了错误的用户名和密码。
改为中文的提示:
打开这个文件可以看到都是转意的码字。
下一步:
打开
重启。
----------------------------------------------------------11--------------------------------------------
cas结合springsecurity实现客户端。代码。
第一步:设置页面不被拦截也是可以访问的。
第二步:
<!-- entry-point-ref 入口点引用 是否启用spel表达式use-expressions默认是true ROLE_USER当前访问的根目录以及所属的子目录角色必须是ROLE_USER-->
<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>
----------------------------------------------------------12--------------------------------------------
大多数不是原生去用的要和springsecurity集成。
第一步:
<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>
排除日志。
第三步:修改springsecurity的配置文件
第一块配置地址拦截规则:
解析:entry-point-ref="casProcessingFilterEntryPoint"是入口点的引用。原生的是自己负责的,现在是cas来做的。
理解为注入即可。入口点相当于是一个接口,具体是上面的具体的技术的实现。
里面的第一个bean是单点的地址
第二个是
是cas客户端的地址加上/login/cas是固定的写法。是集成的自动产生的地址也是回调地址。
----------------------------------------------------------13--------------------------------------------
看完入口点再往下看:
下面是过滤器相关是springsecyrity的过滤器相关。
第一个filter:
:在这个位置上出现,这个位置是什么呢,是springsecurity事先排好的位置。
看下:
请求单点登出过滤器。
单点登出过滤器。
----------------------------------------------------------14--------------------------------------------
我们将第一个过滤器:
<!-- 认证过滤器 开始 -->
<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://localhost:9100/cas"/>
</beans:bean>
</beans:property>
<beans:property name="key" value="an_id_for_this_auth_provider_only"/>
</beans:bean>
<!-- 认证类 -->
<beans:bean id="userDetailsService" class="cn.itcast.demo.service.UserDetailServiceImpl"/>
<!-- 认证过滤器 结束 -->
认证管理器属性。
注入的这个:
认证的提供者:
看上面的这个:
认证类。
就是这个:
接下来:票据验证器:
上面的key受不用管的。
以上主要是做cas认证的。
----------------------------------------------------------15--------------------------------------------
:看下这个功能是谁提供的。
第一个过滤器是单点登出过滤器。做cas的。
第二个过滤器是security提供的。
第一个是之哟服务器的单点登出,第二个是配置地址信息的。
就是将地址封装。
真正的单点登出是服务器做的。
--
总结四个要改的地方。看配置文件。
----------------------------------------------------------16--------------------------------------------
写认证类。
根据用户名返回角色列表。
这个类执行已经认证了。
这个所有的角色列表是最重要的。
这个角色
要和我这个角色是一样的。
角色可能很复杂可能是在数据库查出来的。互联网很简单。
----------------------------------------------------------17--------------------------------------------
测试:启动demo3
----------------------------------------------------------18--------------------------------------------
获取登录名:
第一步:加入springmvc。
<servlet-name>springmvc</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>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
第二步:
第三步:写controller
http://localhost:9003/findLoginUser.do
----------------------------------------------------------19--------------------------------------------
退出登陆:
地址的替换。
放行:
----------------------------------------------------------20--------------------------------------------