900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 多服务集成CAS实现单点登录

多服务集成CAS实现单点登录

时间:2021-10-26 16:24:44

相关推荐

多服务集成CAS实现单点登录

简要概述实现步骤(思路):

1.创建web应用

2.集成CAS(使用CAS服务端内配置账户密码进行登录验证)

2.1导入jar包

2.2配置web.xml文件(拦截跳转验证以及验证结束返回)

3.配置CAS服务端使用数据库表进行登录验证(CAS本地服务搭建)

3.1修改CAS服务端配置文件

4.再创建多个web应用,实现真正的单点登录

4.1同理步骤1、2,登录其中一个应用,其他应用便不用再登录

1.web应用

2.集成CAS(web.xml添加配置)

注意:CAS服务端deployerConfigContext.xml文件这里要加入"http",因为这里web应用采用的是http,不加的话会报没权限使用CAS验证服务。

<util:list id="registeredServicesList"><bean class="org.jasig.cas.services.RegexRegisteredService"p:id="0" p:name="HTTP and IMAP" p:description="Allows HTTP(S) and IMAP(S) protocols"p:serviceId="^(https?|imaps?|http?)://.*" p:evaluationOrder="10000001" />

导入jar包:

<dependency><groupId>org.jasig.cas.client</groupId><artifactId>cas-client-core</artifactId><version>3.3.3</version></dependency><dependency><groupId>org.jasig.cas</groupId><artifactId>cas-server-core-authentication</artifactId><version>4.2.7</version></dependency>

配置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><!-- 登录校验分两步:1.用户名密码校验成功,返回ticket 2.再次请求CAS服务端验证ticket是否有效 --><!-- 该过滤器负责用户的认证工作,必须启用它 --><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>:8443/cas/login</param-value><!--这里的server是服务端的IP,注意后面有/login --></init-param><init-param><!--这里是集成CAS服务的服务地址,即登录校验后跳转的地址--><param-name>serverName</param-name><param-value>http://localhost:28081</param-value></init-param><!--忽略校验的地址,即配置不需要登录校验的请求--><init-param><param-name>ignorePattern</param-name><param-value>/js/*|/img/*|/view/*|/css/*|/page/list</param-value></init-param></filter><filter-mapping><filter-name>CASFilter</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>:8443/cas</param-value><!-- 该地址为校验ticket的地址,注意后面没有/login --></init-param><init-param><param-name>serverName</param-name><param-value>http://localhost:28081</param-value><!-- 校验成功后跳转的地址(CAS服务端那边) --></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><!--cas相关结束-->

到此第二步完成,启动应用访问 http://localhost:28081 发现集成成功,访问主页需要登录,默认账户密码:casuser --- Mellon

3.配置CAS服务端使用数据库表进行登录验证

说明:

认证对比方式为:先根据username查询数据库,返回password(已加密存储),加密登录页面传进来的password,对比这两个password是否相等。

CAS服务端导入jar包:

cas-server-support-jdbc-4.2.7.jar、cas-server-support-rest-4.2.7.jar、mysql-connector-java-5.1.45.jar

配置deployerConfigContext.xml文件:

注释掉原有的认证bean:

<!--查询数据所采用什么加密方式 认证方式:查询数据库--><bean id="queryDatabaseAuthenticationHandler" name="primaryAuthenticationHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"><property name="passwordEncoder" ref="MD5PasswordEncoder"/><property name="dataSource" ref="dataSource"/><property name="sql" value="${cas.jdbc.authn.query.sql}"/></bean><!--配置加密算法 密码采用的加密方式--><bean id="MD5PasswordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" autowire="byName"><constructor-arg value="MD5"/></bean><!--名字叫dataSource的Bean取别名叫queryDatabaseDataSource--><alias name="dataSource" alias="queryDatabaseDataSource"/><!--配置数据源--><bean id="dataSource" class="com.mchange.boPooledDataSource"p:driverClass="com.mysql.jdbc.Driver"p:jdbcUrl="jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull"p:user="root"p:password="123456"p:initialPoolSize="6"p:minPoolSize="6"p:maxPoolSize="18"p:maxIdleTimeExcessConnections="120"p:checkoutTimeout="10000"p:acquireIncrement="6"p:acquireRetryAttempts="5"p:acquireRetryDelay="2000"p:idleConnectionTestPeriod="30"p:preferredTestQuery="select 1"/><!--end 从数据库中的用户表中读取 -->

配置cas.properties文件,添加查询数据库sql语句:

# cas.jdbc.authn.query.sql=cas.jdbc.authn.query.sql=select password from user where username=?

到此,配置完成。

验证:数据库存入test1 --- 594f803b380a41396ed63dca39503542 登录页面输入test1 --- aaaaa

注:笔记使用

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。