Here are the rough steps how I created a WsAuthenticationHandler for CAS 3.4.xx
using SpringWS 1.5.4 and JaxB marshalling.
Use the recommended Maven Overlay project setup as stated in the CAS CASUM Wiki
manual.
1. Implement a WsAuthenticationHandler which extends
AbstractUsernamePasswordAuthenticationHandler and uses an injected
WebserviceClient for authentication:
public class WebserviceAuthenticationHandler extends
AbstractWebserviceAuthenticationHandler implements InitializingBean {
protected final boolean authenticateUsernamePasswordInternal(
UsernamePasswordCredentials credentials) throws
AuthenticationException {
return this._webserviceClient.doAuthentication(credentials);
}
public final void setWebserviceClient(final WebserviceClient
webserviceClient) {
this._webserviceClient = webserviceClient;
}
}
2. Create WebserviceClient interface:
public interface WebserviceClient {
public boolean doAuthentication(final UsernamePasswordCredentials
credentials) throws AuthenticationException;
}
3. Create a webserviceClient impl
e.g.:
public class YourWsClient implements WebserviceClient {
public boolean doAuthentication(UsernamePasswordCredentials
credentials) throws AuthenticationException {
LogUtils.setNdcLogIdentifier(credentials);
MyRequest request = ObjectFactory.createMyRequest();
request.setUsername(credentials.getUsername);
request.setPassword(credentials.getPassword);
try {
response = (AuthenticateUserResponse)
getWebServiceTemplate().marshalSendAndReceive(request);
return (response.isLoggedIn()); // just an example.
} catch (Exception e){
throw
AuthenticationException("error.authentication.credentials.bad");
}
}
}
4. Define the wsClient bean with its marshaller and unmarshaller (I use a
separate wsConfigContext.xml file for this)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="yourWsClient" class="xxx.cas.adaptors.ws.YourWsClient">
<property name="marshaller" ref="marshaller"/>
<property name="unmarshaller" ref="marshaller"/>
<property name="defaultUri"
value="https://<ws-server>/<ws-endpoint-address>"/>
</bean>
<!-- (Un-)Marshaller -->
<bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="contextPath"
value="<your_package_name_of_xjc_generated_schema_classes>"/>
</bean>
</beans>
5. Wire in the WebserviceAuthenticationHandler into deployerConfigContext.xml
authenticationManager:
...
<bean id="authenticationManager"
class="org.jasig.cas.authentication.AuthenticationManagerImpl">
<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" />
<!-- Your Webservice Authentication Handler -->
<bean id="wsAuthHandler"
class="xxx.handler.WebserviceAuthenticationHandler">
<property name="webserviceClient"
ref="yourWsClient"/>
</bean>
</list>
</property>
</bean>
…
6. add the wsConfigContext.xml to web.xml:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring-configuration/*.xml
/WEB-INF/deployerConfigContext.xml
/WEB-INF/wsConfigContext.xml
</param-value>
</context-param>
You can add the jaxb2 maven plugin to the pom.xml to generate the schema
classes automatically.
See http://mojo.codehaus.org/jaxb2-maven-plugin/usage.html
Robert
Am 11.04.2013 um 10:37 schrieb Carlos Lorenzo <[email protected]>:
> Thank you for your quick response, Robert.
> Could you elaborate a little more your solution??.
> As I said in the previous mail I am fairly new with JASIG Cas Server.
>
>
> Thanks.
>
>
>
> --
> You are currently subscribed to [email protected] as:
> [email protected]
> To unsubscribe, change settings or access archives, see
> http://www.ja-sig.org/wiki/display/JSG/cas-user
--
You are currently subscribed to [email protected] as:
[email protected]
To unsubscribe, change settings or access archives, see
http://www.ja-sig.org/wiki/display/JSG/cas-user