cas服务端和cas客户端配好,访问cas服务端可以登录,访问客户端应用资源的时候出现拒绝访问问题
首次登录直接出现拒绝访问
cas服务端配置:
cas.properties
- #server.prefix=http://localhost:8080/cas
- #server.prefix=http://cas.wucht.com:8080/casServer
- server.prefix=http://localhost:8080/casServer
- cas.securityContext.serviceProperties.service=${server.prefix}/j_acegi_cas_security_check
- # Names of roles allowed to access the CAS service manager
- cas.securityContext.serviceProperties.adminRoles=ROLE_ADMIN
- cas.securityContext.casProcessingFilterEntryPoint.loginUrl=${server.prefix}/login
- cas.securityContext.ticketValidator.casServerUrlPrefix=${server.prefix}
- cas.themeResolver.defaultThemeName=cas-theme-default
- #cas.themeResolver.defaultThemeName=default
- cas.viewResolver.basename=default_views
- #host.name=cas
- host.name=casServer
- #database.hibernate.dialect=org.hibernate.dialect.OracleDialect
- database.hibernate.dialect=org.hibernate.dialect.MySQLDialect
- #database.hibernate.dialect=org.hibernate.dialect.HSQLDialect
deployerConfigContext.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <!--
- | deployerConfigContext.xml centralizes into one file some of the declarative configuration that
- | all CAS deployers will need to modify.
- |
- | This file declares some of the Spring-managed JavaBeans that make up a CAS deployment.
- | The beans declared in this file are instantiated at context initialization time by the Spring
- | ContextLoaderListener declared in web.xml. It finds this file because this
- | file is among those declared in the context parameter "contextConfigLocation".
- |
- | By far the most common change you will need to make in this file is to change the last bean
- | declaration to replace the default SimpleTestUsernamePasswordAuthenticationHandler with
- | one implementing your approach for authenticating usernames and passwords.
- +-->
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:p="http://www.springframework.org/schema/p"
- xmlns:sec="http://www.springframework.org/schema/security"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd">
- <!--
- | This bean declares our AuthenticationManager. The CentralAuthenticationService service bean
- | declared in applicationContext.xml picks up this AuthenticationManager by reference to its id,
- | "authenticationManager". Most deployers will be able to use the default AuthenticationManager
- | implementation and so do not need to change the class of this bean. We include the whole
- | AuthenticationManager here in the userConfigContext.xml so that you can see the things you will
- | need to change in context.
- +-->
- <bean id="authenticationManager"
- class="org.jasig.cas.authentication.AuthenticationManagerImpl">
- <!--
- | This is the List of CredentialToPrincipalResolvers that identify what Principal is trying to authenticate.
- | The AuthenticationManagerImpl considers them in order, finding a CredentialToPrincipalResolver which
- | supports the presented credentials.
- |
- | AuthenticationManagerImpl uses these resolvers for two purposes. First, it uses them to identify the Principal
- | attempting to authenticate to CAS /login . In the default configuration, it is the DefaultCredentialsToPrincipalResolver
- | that fills this role. If you are using some other kind of credentials than UsernamePasswordCredentials, you will need to replace
- | DefaultCredentialsToPrincipalResolver with a CredentialsToPrincipalResolver that supports the credentials you are
- | using.
- |
- | Second, AuthenticationManagerImpl uses these resolvers to identify a service requesting a proxy granting ticket.
- | In the default configuration, it is the HttpBasedServiceCredentialsToPrincipalResolver that serves this purpose.
- | You will need to change this list if you are identifying services by something more or other than their callback URL.
- +-->
- <property name="credentialsToPrincipalResolvers">
- <list>
- <!--
- | UsernamePasswordCredentialsToPrincipalResolver supports the UsernamePasswordCredentials that we use for /login
- | by default and produces SimplePrincipal instances conveying the username from the credentials.
- |
- | If you've changed your LoginFormAction to use credentials other than UsernamePasswordCredentials then you will also
- | need to change this bean declaration (or add additional declarations) to declare a CredentialsToPrincipalResolver that supports the
- | Credentials you are using.
- +-->
- <bean
- class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver">
- <!--增加此属性,为认证过的用户的Principal添加属性-->
- <property name="attributeRepository" ref="attributeRepository"></property>
- </bean>
- <!--
- | HttpBasedServiceCredentialsToPrincipalResolver supports HttpBasedCredentials. It supports the CAS 2.0 approach of
- | authenticating services by SSL callback, extracting the callback URL from the Credentials and representing it as a
- | SimpleService identified by that callback URL.
- |
- | If you are representing services by something more or other than an HTTPS URL whereat they are able to
- | receive a proxy callback, you will need to change this bean declaration (or add additional declarations).
- +-->
- <bean
- class="org.jasig.cas.authentication.principal.HttpBasedServiceCredentialsToPrincipalResolver" />
- </list>
- </property>
- <!--
- | Whereas CredentialsToPrincipalResolvers identify who it is some Credentials might authenticate,
- | AuthenticationHandlers actually authenticate credentials. Here we declare the AuthenticationHandlers that
- | authenticate the Principals that the CredentialsToPrincipalResolvers identified. CAS will try these handlers in turn
- | until it finds one that both supports the Credentials presented and succeeds in authenticating.
- +-->
- <property name="authenticationHandlers">
- <list>
- <!--
- | This is the authentication handler that authenticates services by means of callback via SSL, thereby validating
- | a server side SSL certificate.
- +-->
- <bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
- p:httpClient-ref="httpClient" />
- <!--
- | This is the authentication handler declaration that every CAS deployer will need to change before deploying CAS
- | into production. The default SimpleTestUsernamePasswordAuthenticationHandler authenticates UsernamePasswordCredentials
- | where the username equals the password. You will need to replace this with an AuthenticationHandler that implements your
- | local authentication strategy. You might accomplish this by coding a new such handler and declaring
- | edu.someschool.its.cas.MySpecialHandler here, or you might use one of the handlers provided in the adaptors modules.
- +-->
- <!--
- <bean
- class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
- -->
- <!-- 数据库认证.wucht-->
- <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
- <property name="dataSource" ref="dataSource" />
- <property name="sql" value="select password from users where name=?" />
- </bean>
- </list>
- </property>
- </bean>
- <!-- DATABASE 增加数据源配置 -->
- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
- <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
- <property name="url"><value>jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf-8</value></property>
- <property name="username"><value>root</value></property>
- <property name="password"><value>root</value></property>
- </bean>
- <!--
- This bean defines the security roles for the Services Management application. Simple deployments can use the in-memory version.
- More robust deployments will want to use another option, such as the Jdbc version.
- The name of this should remain "userDetailsService" in order for Spring Security to find it.
- -->
- <!-- <sec:user name="@@THIS SHOULD BE REPLACED@@" password="notused" authorities="ROLE_ADMIN" />-->
- <sec:user-service id="userDetailsService">
- <sec:user name="@@THIS SHOULD BE REPLACED@@" password="notused" authorities="ROLE_ADMIN" />
- </sec:user-service>
- <!--
- Bean that defines the attributes that a service may return. This example uses the Stub/Mock version. A real implementation
- may go against a database or LDAP server. The id should remain "attributeRepository" though.
- -->
- <!--
- <bean id="attributeRepository"
- class="org.jasig.services.persondir.support.StubPersonAttributeDao">
- <property name="backingMap">
- <map>
- <entry key="uid" value="uid" />
- <entry key="eduPersonAffiliation" value="eduPersonAffiliation" />
- <entry key="groupMembership" value="groupMembership" />
- </map>
- </property>
- </bean>
- -->
- <!-- 使用SingleRowJdbcPersonAttributeDao 获取更多用户的信息 -->
- <bean id="attributeRepository" class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao">
- <constructor-arg index="0" ref="dataSource"/>
- <constructor-arg index="1" value="select role_name from role where login_name = ?"/>
- <!--这里的key需写username,value对应数据库用户名字段 -->
- <property name="queryAttributeMapping">
- <map>
- <entry key="username" value="login_name"/>
- </map>
- </property>
- <!--key对应数据库字段,value对应客户端获取参数 -->
- <!-- 返回数据认证后的数据 -->
- <property name="resultAttributeMapping">
- <map>
- <!--这个从数据库中获取的角色,用于在应用中security的权限验证-->
- <entry key="role_name" value="authorities"/>
- </map>
- </property>
- </bean>
- <!--
- Sample, in-memory data store for the ServiceRegistry. A real implementation
- would probably want to replace this with the JPA-backed ServiceRegistry DAO
- The name of this bean should remain "serviceRegistryDao".
- -->
- <bean
- id="serviceRegistryDao"
- class="org.jasig.cas.services.InMemoryServiceRegistryDaoImpl">
- <!--
- <property name="registeredServices">
- <list>
- <bean class="org.jasig.cas.services.RegisteredServiceImpl">
- <property name="id" value="0" />
- <property name="name" value="HTTP" />
- <property name="description" value="Only Allows HTTP Urls" />
- <property name="serviceId" value="http://**" />
- <property name="evaluationOrder" value="10000001" />
- </bean>
- <bean class="org.jasig.cas.services.RegisteredServiceImpl">
- <property name="id" value="1" />
- <property name="name" value="HTTPS" />
- <property name="description" value="Only Allows HTTPS Urls" />
- <property name="serviceId" value="https://**" />
- <property name="evaluationOrder" value="10000002" />
- </bean>
- <bean class="org.jasig.cas.services.RegisteredServiceImpl">
- <property name="id" value="2" />
- <property name="name" value="IMAPS" />
- <property name="description" value="Only Allows HTTPS Urls" />
- <property name="serviceId" value="imaps://**" />
- <property name="evaluationOrder" value="10000003" />
- </bean>
- <bean class="org.jasig.cas.services.RegisteredServiceImpl">
- <property name="id" value="3" />
- <property name="name" value="IMAP" />
- <property name="description" value="Only Allows IMAP Urls" />
- <property name="serviceId" value="imap://**" />
- <property name="evaluationOrder" value="10000004" />
- </bean>
- </list>
- </property>
- -->
- </bean>
- <bean id="auditTrailManager" class="com.github.inspektr.audit.support.Slf4jLoggingAuditTrailManager" />
- </beans>
spring配置
- <?xml version="1.0" encoding="UTF-8"?>
- <beans:beans xmlns="http://www.springframework.org/schema/security"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:p="http://www.springframework.org/schema/p"
- xmlns:beans="http://www.springframework.org/schema/beans"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
- http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd"
- default-lazy-init="true">
- <!--
- entry-point-ref="casEntryPoint"作用是认证的入口,是一个实现AuthenticationEntryPoint接口的类
- ,为ExceptionTranslationFilter类提供认证依据,
- <custom-filter position="FORM_LOGIN_FILTER" ref="casFilter"/> 使用自定义的Filter,放置在过滤器链的FORM_LOGIN_FILTER的位置
- casEntryPoint只是提供认证入口的作用,当没有权限,将跳转到该地址。
- casFilter是处理CAS service ticket的,当无权访问时,会使用casEntryPoint提供认证入口
- -->
- <http auto-config="true" entry-point-ref="casEntryPoint"
- access-denied-page="/403.jsp">
- <intercept-url pattern="/**" access="ROLE_USER" />
- <!-- ROLE_ADMIN-->
- <!-- logout-success-url="/login.html" -->
- <!-- 注销时需要先注销应用程序,再注销cas中心认证服务 -->
- <logout logout-url="/logout.html"
- success-handler-ref="casLogoutSuccessHandler" />
- <custom-filter position="CAS_FILTER" ref="casFilter" />
- </http>
- <authentication-manager alias="authenticationManager">
- <authentication-provider ref="casAuthenticationProvider" />
- </authentication-manager>
- <!-- cas中心认证服务入口 -->
- <beans:bean id="casEntryPoint"
- class="org.springframework.security.cas.web.CasAuthenticationEntryPoint">
- <beans:property name="loginUrl"
- value="http://localhost:8080/casServer/login" />
- <beans:property name="serviceProperties"
- ref="serviceProperties" />
- </beans:bean>
- <!-- cas中心认证服务配置 -->
- <beans:bean id="serviceProperties"
- class="org.springframework.security.cas.ServiceProperties">
- <beans:property name="service"
- value="http://localhost:8080/Cas_Client/j_acegi_cas_security_check" />
- <beans:property name="sendRenew" value="false" />
- </beans:bean>
- <!-- CAS service ticket(中心认证服务凭据)验证 -->
- <beans:bean id="casFilter"
- class="org.springframework.security.cas.web.CasAuthenticationFilter">
- <beans:property name="authenticationManager"
- ref="authenticationManager" />
- <!-- <beans:property name="authenticationFailureHandler">-->
- <!-- <beans:bean-->
- <!-- class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">-->
- <!-- <beans:property name="defaultFailureUrl"-->
- <!-- value="/logout.html" />-->
- <!-- </beans:bean>-->
- <!-- </beans:property>-->
- <!-- 登录成功后的页面,如果是固定的。否则 ref="authenticationSuccessHandler" -->
- <!-- <beans:property name="authenticationSuccessHandler">-->
- <!-- <beans:bean-->
- <!-- class="org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler">-->
- <!-- <beans:property name="defaultTargetUrl"-->
- <!-- value="/index.jsp" />-->
- <!-- </beans:bean>-->
- <!-- </beans:property>-->
- </beans:bean>
- <!-- 从Cas Server得到用户信息 -->
- <beans:bean id="authenticationUserDetailsService"
- class="org.springframework.security.cas.userdetails.GrantedAuthorityFromAssertionAttributesUserDetailsService">
- <beans:constructor-arg>
- <beans:array>
- <beans:value>authorities</beans:value>
- </beans:array>
- </beans:constructor-arg>
- </beans:bean>
- <beans:bean id="userDetailsService"
- class="com.reportstart.security.service.impl.BocUserDetaislServiceImpl">
- <!-- <beans:property name="userDao">-->
- <!-- <beans:ref bean="userDao" />-->
- <!-- </beans:property>-->
- </beans:bean>
- <!-- <beans:bean id="authenticationUserDetailsService"-->
- <!-- class="org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper">-->
- <!-- <beans:property name="userDetailsService">-->
- <!-- <beans:ref local="userDetailsService" />-->
- <!-- </beans:property>-->
- <!-- </beans:bean>-->
- <beans:bean id="casAuthenticationProvider"
- class="org.springframework.security.cas.authentication.CasAuthenticationProvider">
- <!-- 使用自定义service获取用户信息 -->
- <!-- <beans:property name="authenticationUserDetailsService"-->
- <!-- ref="casAuthenticationUserDetailsService" />-->
- <!-- 通过Cas Server获取用户信息 -->
- <beans:property name="authenticationUserDetailsService"
- ref="authenticationUserDetailsService" />
- <beans:property name="serviceProperties"
- ref="serviceProperties" />
- <beans:property name="ticketValidator">
- <beans:bean
- class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator">
- <beans:constructor-arg index="0"
- value="http://localhost:8080/casServer" />
- </beans:bean>
- </beans:property>
- <!-- 自定义cas客户端应用标示.wucht.2012-6-4(每个cas客户端都需要一个key标示用于区分不同cas客户端) -->
- <beans:property name="key"
- value="Cas_Client" />
- </beans:bean>
- <!-- 注销 -->
- <beans:bean id="casLogoutSuccessHandler"
- class="com.wucht.test.CasLogoutSuccessHandler">
- </beans:bean>
- </beans:beans>
Spring Security与CAS集成,第一次访问客户端页面,出现异常是正常的,因为Spring Security有个异常拦截的filter拦截到访问拒绝异常,才会跳转到入口点entry-point的(即:CAS 服务端登录界面)。
在CAS服务端登录界面输入账号、密码后,无法跳转到客户端,而后台打印的日志已经清楚说明了
org.springframework.security.web.access.ExceptionTranslationFilter:165 - Access is denied (user is anonymous); redirecting to authentication entry point
登录账号属于anonymous
相关推荐
Spring Security 3 与 CAS 单点登录配置 Spring Security 3 是一个基于 Java 的安全框架,提供了灵活的身份验证、授权和访问控制功能。CAS(Central Authentication Service)是一种流行的单点登录协议,允许用户...
通过以上步骤,你可以构建一个基于Spring Security和CAS的单点登录系统。这个过程需要对Spring Security和CAS有深入的理解,以及一定的Java Web开发经验。通过实践和学习,你将能熟练掌握这个技术,并应用于实际项目...
标题 "Spring Security 3 与 CAS 单点登录配置 - Server" 涉及到的是在企业级应用中实现安全访问控制的重要技术。Spring Security 是一个强大的和高度可定制的安全框架,用于保护基于 Java 的 Web 应用程序。而 CAS...
单点登录(Single Sign-On,简称SSO)是一种在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的技术。在企业级应用中,SSO能够提供更便捷的用户体验,同时也增强了安全性。本篇将详细介绍如何...
本文将详细解析"springboot+security+cas集成demo"的相关知识点。 首先,Spring Boot是由Pivotal团队提供的一个用于简化Spring应用初始搭建以及开发过程的框架。它集成了大量的常用组件,并提供了默认配置,使得...
本实例旨在展示如何将Spring Security与CAS结合,实现一个高效的单点登录(Single Sign-On,SSO)解决方案。下面,我们将深入探讨这个集成过程。 首先,Spring Security是Spring框架的一部分,专门用于应用程序的...
Spring Boot 整合 CAS Client 实现单点登录验证的示例 Spring Boot 整合 CAS Client 是一种流行的解决方案,用于实现单点登录(Single Sign-On,简称 SSO)。在多个应用系统中,用户只需要登录一次就可以访问所有...
总之,CAS单点登录系统提供了统一的身份验证入口,简化了用户登录过程,提高了用户体验。通过理解和实践CAS Server的配置以及客户端的集成,开发者可以有效地在自己的应用环境中实现单点登录功能。
cas是Central Authentication Service的简写.提供中央认证服务,实现企业级单点登录.详细参考:http://blog.csdn.net/xiejx618/article/details/51703469
spring security 结合cas 单点登录系统 cas客户端的配置文件
例如,我们需要集成短信验证码登录、第三方登录、图片验证码登录、微信小程序登录、CAS单点登录等多种登录方式。 为了优雅地集成短信验证码登录及第三方登录,我们需要满足以下要求: 1. 不侵入Spring Security ...
在提供的PDF文件`cas单点登录(一).pdf`和`cas单点登录(二).pdf`中,应该详细涵盖了这些步骤,以及更深入的技术细节,包括可能出现的问题和解决方案。通过学习这些文档,你应该能够成功地配置和实施CAS单点登录...
【Spring Security + CAS 单点登录详解】 Spring Security 是一个强大的安全框架,它提供了一整套的认证和授权机制,可以有效地保护Web应用程序的安全。CAS(Central Authentication Service)则是一种集中式的身份...
本压缩包"集成cas实现单点登录认证.zip"显然包含了关于如何使用CAS(Central Authentication Service)框架集成SSO认证的资源。下面我们将详细探讨相关的知识点。 1. CAS简介:CAS是耶鲁大学开源的一个Web应用的...
**CAS单点登录配置大全** CAS(Central Authentication Service,中央认证服务)是一种广泛使用的开源单点登录(Single Sign-On,SSO)协议。它允许用户通过一个统一的认证系统访问多个应用系统,而无需在每个系统...
本随笔将深入探讨SpringSecurity在实现单点登录(Single Sign-On, SSO)中的关键概念和技术。 ### 一、SpringSecurity简介 SpringSecurity是一个可高度定制的安全框架,它构建在Spring框架之上,提供了一种声明式...