You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cxf.apache.org by Freeman Fang <fr...@gmail.com> on 2012/04/16 06:23:17 UTC
Re: how to pass authentication credentials to service class in cxf webservice
Hi,
In your interceptor you can save the authentication parameter in
message, and in your impl class you can have code like
@Resource
private WebServiceContext wsContext;
Then can use code like
MessageContext ctx = wsContext.getMessageContext();
Message message =
((WrappedMessageContext)ctx).getWrappedMessage();
//here you can get authentication parameter you saved
previously from message
Freeman
On 2012-4-13, at 下午9:48, shashi wrote:
> Hi,
>
> I am learning to develop a web service using cxf with spring
> framework. I
> have developed a sample authenticated web service application using
> interceptors and I am stuck in passing authentication
> parameter(username and
> password) to service class which implements the interface.
>
> Web service code is as follows.
>
> Student class:
> public class Student {
> private String name;
> public String getName() {
> return name;
> }
> public void setName(String name) {
> this.name = name;
> }
> }
>
> Interface:
> @WebService
> public interface ChangeStudentDetails {
> Student changeName(Student student);
> }
>
> Implementation:
> @WebService(endpointInterface = "com.student.ChangeStudentDetails")
> public class ChangeStudentDetailsImpl implements
> ChangeStudentDetails {
> public Student changeName(Student student) {
> student.setName("Hello "+student.getName());
> return student;
>
> }
>
>
> Interceptor class:
> public class WSSecurityInterceptor extends
> AbstractPhaseInterceptor<Message>
> {
>
> public SVWSSecurityInterceptor() {
> super(Phase.PRE_PROTOCOL);
> }
>
> public SVWSSecurityInterceptor(String s) {
> super(Phase.PRE_PROTOCOL);
> }
>
> public void handleMessage(Message message) throws Fault {
>
> Map props = new HashMap();
> props.put(WSHandlerConstants.ACTION,
> WSHandlerConstants.USERNAME_TOKEN);
> CallbackHandler callbackHandler = (CallbackHandler)
> SpringApplicationContextProvider.getInstance().getBean("handler");
> props.put(WSHandlerConstants.PW_CALLBACK_REF, panPassCallback);
> WSS4JInInterceptor wss4jInHandler = new
> WSS4JInInterceptor(props);
> message.getInterceptorChain().add(new SAAJInInterceptor());
> message.getInterceptorChain().add(wss4jInHandler);
>
> }
> }
>
> Callback handler class:
> public class CallbackHandler implements CallbackHandler {
> public void handle(Callback[] callbacks) throws IOException,
> UnsupportedCallbackException {
> WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
> String uname= pc.getIdentifier();
> String upassword=pc.getPassword();
>
> if (uname != null ) {
>
> List<GrantedAuthority> authorities =
> testmethod.getAuthorities(user, instance);
> authorities.addAll(authorities);
> UsernamePasswordAuthenticationToken result = new
> UsernamePasswordAuthenticationToken(uname, upassword, authorities);
>
> SecurityContextHolder.getContext().setAuthentication(result);
> }
> }
> }
>
> While debugging the application the workflow was as follows
> Interceptor
> class->callback handler->service class(ChangeStudentDetailsImpl)
>
> Suppose if I want to pass the username and password to service class
> for
> additional verification of username(username and password are
> obtained in
> callback handler). How do I do this?
>
> What is the best way to pass the authentication credentials to service
> class?
>
> Any suggestion would be great.
>
> Thank you
> shashi
>
>
>
> --
> View this message in context: http://cxf.547215.n5.nabble.com/how-to-pass-authentication-credentials-to-service-class-in-cxf-webservice-tp5638346p5638346.html
> Sent from the cxf-issues mailing list archive at Nabble.com.
---------------------------------------------
Freeman Fang
FuseSource
Email:ffang@fusesource.com
Web: fusesource.com
Twitter: freemanfang
Blog: http://freemanfang.blogspot.com
http://blog.sina.com.cn/u/1473905042
weibo: http://weibo.com/u/1473905042