2011-08-16 18 views
5

Servicio web Java, ¿es posible exponer diferentes métodos para diferentes usuarios?Java Web Service - Métodos web seguros por usuario

Por ejemplo, tengo 10 métodos en mi servicio web pero quiero permitir que el usuario A tenga acceso a 1 o 2 métodos solamente, ¿cómo se puede hacer esto?

+0

¿este es un servicio web REST? un SOAP uno? – ElenaT

+0

@ElenaT Este es un servicio web SOAP. –

Respuesta

1

Supongo que no puede ocultar por completo los métodos del usuario. Lo único que puede hacer es proporcionar solo la información requerida al usuario específico. En una de mis aplicaciones, he implementado esto usando Decorate Design Pattern. Trataré de explicarlo.

Puede separar esta lógica en alguna clase que no sea webservice. Cree 2 servicios web (uno para cada modelo de acceso de usuario). Llame a la lógica separada de cada uno de los servicios web.

Supongamos que ha creado la clase CommonA que contiene los métodos 1 ~ 10. Crear un servicio web, por ejemplo, ForUserA, contiene el método 1 y 2 solo, que llama al método 1 y 2 de CommonA. y así.

Será un gran placer si alguien sugiere la mejor manera de hacerlo.

1

Para que su servicio web determine qué usuario está llamando actualmente a su método de servicio web, necesita algún tipo de autenticación.

Dado que ambos SAOP & REST utilizan el protocolo HTTP, puede utilizar las sesiones. Una vez que su cliente se ha autenticado a sí mismo, puede permitirle/negarle el acceso a cualquier método web que desee.

Aquí hay un ejemplo fácil para un servicio SOAP.

@Resource WebServiceContext wsContext; 

MessageContext mc = wsContext.getMessageContext(); 
HttpSession session = ((javax.servlet.http.HttpServletRequest)mc.get(MessageContext.SERVLET_REQUEST)).getSession(); 
String username = (String)session.getAttribute("username"); 
if(username.equals("userA") { 
    // Do your thing 
} else { 
    throw new WebServiceException("Not allowed to access this method."); 
}