Aquí usamos Spring-Security y el paquete nativo de Jasig CAS para la integración. ¿Por qué la seguridad de primavera se proporciona-Cas proporcionada por la primavera no se usa directamente? Se explicará más tarde.
Configuración
web.xml
<filter> <filter-name>casFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class></filter><filter-mapping> <filter-name>casFilterChain</filter-name> <url-pattern>/*</url-pattern></filter-mapping><listener> <Oyerer-class> org.jasig.cas.client.session.singlesignouthttpsessionListener </oyener-class> </oyente>
ApplicationContext-Security.xml
<? xml versión = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" "" "" xmlns: seguridad = "http://www.springframework.org/schema/security" xmlns: util = "http://www.springframework.org/schema/util" xsi: schemalocation http://www.springframework.org/schema/Beans/spring-Beans.xsd http://www.springframework.org/schema/security http://www.springfrframworks.org/schema/security/spring-security-3. http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd "> <bean id =" casfilterchain "> <constructor-arg> <util: list> <secaries: filtro-chain patrón ="/** " filtros = "SingleSeGeutFilter, CAS20ProxyReceiveticketValidationFilter, AuthenticationFilter, httpservletRequestwrapperfilter, AssertionThreadLocalFilter"/> </util: list> </constructor-arg> </ bean> <bean id = "singleigneutfilter"/> <</bean id = "CAS20ProxyReVeticketValidationFilter"> <Property Name = "ServerName" value = "$ {client.url}"/> <propiedad name = "ticketValidator" ref = "Cas20ServiceTicketValidator"/> </bean> <bean id = "CAS20ServicetetetValidator"> <Constructor-argArgAn value = "$ {cas.url}"/> <propiedad name = "renovar" value = "false"/> </ bean> <bean id = "autenticationFilter"> <propiedad name = "renovar" value = "false"/> <propiedad name = "casserverLoginurl" value = "$ {Cas.url}"/> <name de propiedad = "name de propiedad =" value = "$ {client} <bean id = "httpservletrequestwrapperfilter"/> <bean id = "asertionThreadLocalFilter"/> </beans> Propiedades
#Cas Dirección de servicio Cas.url = https: //cas.example.com: 8443#La dirección del cliente CAS es la dirección de esta aplicación cliente.URL = http: // localhost: 8080
analizar
En la cadena de filtro de seguridad en ApplicationContext-Security.xml, usamos 5 filtros, a saber: SingleSeGeutFilter, CAS20ProxyReceiveticketValidationFilter, AuthenticationFilter, HttpServletRequestWrapperfilter y AssertionThreadLocalfilter.
¿Por qué no usar la seguridad de primavera?
Spring-Seecurity-Cas
El filtro de validador de tickets responsable en Spring-Security-Cas es el org.springframework.security.cas.authentication.casauthenticationProvider.
Casauthentication privada AuthenticateNow (autenticación de autenticación final) lanza AuthenticationException {try {afirmación de afirmación final = this.ticketValidator.validate (autenticación.getCredentials (). toString (), getServiceUrl (autenticación)); ...Al construir el segundo parámetro del método de validador del validador
String privado getServiceUrl (autenticación autenticación) {String ServiceUrl; if (autenticación.getDetails () instancia de serviceUthenticationDetails) {ServiceUrl = ((ServiceAuthenticationDetails) Autenticación.getDetails ()). GetServiceUrl (); } else if (ServiceProperties == NULL) {Throw New IlegalStateException ("ServiceProperties no puede ser nulo a menos que la autenticación.getDetails () implementa ServiceUthenticationDetails."); } else if (ServiceProperties.getService () == NULL) {Throw New IlegalStateException ("ServiceProperties.GetService () no puede ser nulo a menos que la autenticación.getDetails () implementa ServiceAuthenticationDetails."); } else {ServiceUrl = ServiceProperties.getService (); } if (logger.isDebugeNabled ()) {logger.debug ("servicioRURL ="+ServiceUrl); } return ServiceUrl;}Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.