项目1------黑马品优购------------day15---------单点登录

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

1.2. 结构化一下 1.3. 图形化一下 1.3.1. 运营商后台 1.3.2. 商家后台 1.3.3. 网页前台 参考京东 2. 技术选型 前端:angularJS + Bootstrap 后台:SSM( springmvc+spring+mybatis) 数据库:mysql,使用mycat读写分离 开发模式:SOA 服务中间件:dubbox,需要和zookeeper配合使用 注册中心:zookeeper 消息中间件:Activemq,使用spring-jms 负载均衡:nginx 搜索:solr集群(solrCloud),配合zookeeper搭建, 使用spring-data-solor 缓存:redis集群,使用spring-data-redis 图片存储:fastDFS集群 网页静态化:freemarker 单点登录:cas 权限管理:SpringSecurity, 跨域:cros 支付:微信扫描 短信验证:阿里大于 密码加密:BCrypt 富文本:KindEditor 事务:声明式事务 任务调度:spring task 所有的技术,都可能涉及到为什么用?怎么用?用的过程中有什么问题? 3. 框架搭建 3.1. 前端 理解baseControler.js、base.js、base_pagination.js,以及每一个xxxController.js里面都公共的做了些什么。 baseControler.js 分页配置 列表刷新 处理checkBox勾选 xxxControler.js 自动生成增删改查 base_pagination.js 带分页 base.js 不带分页 3.2. dao 使用了mybatis逆向工程 4. 模块开发 逐个模块开发就好 4.1. 学会评估模块难不难 一个模块难不难从几方面考虑。 涉及几张表? 1,2张表的操作还是没有什么难度的。 涉及哪些功能? 增删改查,批量删除。 前端展示? 分页列表、树形、面包屑、三级联动、内容格式化。 4.2. 举几个简单模块的例子 4.2.1. 品牌管理 单表 分页、新增、删除、修改 4.2.2. 规格管理 2张表 分页、新增、删除、修改、显示优化(显示列表内容的一部分) 4.2.3. 模板管理 2张表 分页、新增、删除、修改、显示优化(显示列表内容的一部分) 4.2.4. 分类管理 单表 4.2.5. 商家审核 单表 4.3. 举一个复杂模块 4.3.1. 商品新增 需要插入3张表,tb_goods、tb_goods_desc、tb_item 前端:三级联动、富文本、图片上传、动态生成内容 4.3.2. 商品修改 需要从3张表获取数据,然后进行回显。 4.4. 典型模块设计 4.4.1. 管理后台 商品新增、商品修改 4.4.2. 前台页面 搜索模块实现 购物车模块实现 支付模块实现 秒杀模块实现 5. 开发过程中问题&优化 1.1. 登录 单点登录怎么实现 session怎么共享 1.2. 缓存 哪些场景需要用到redis redis存储格式的选择 怎么提高redis缓存利用率 缓存如何同步 1.3. 图片上传 图片怎么存储 图片怎么上传 1.4. 搜索 ​ 怎么实现 数据量大、 并发量高的搜索 怎么分词 1.5. 消息通知 ​ 哪些情况用到activeMq 1.6. 优化 seo怎么优化 怎么加快访问速度 1.7. 秒杀 ​ 怎么处理高并发 ​ 秒杀过程中怎么控制库存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值