Mecanismo de seguridad del filtro de servicios web
¿Solo los clientes que cumplan con los requisitos de seguridad pueden acceder al servicio web? Sistemas ambientales del proyecto: ¿Ganar? mieclipse:? Tomcat: JDK: Entorno de desarrollo y eje del entorno de compilación:
¿Archivo de configuración de código de muestra ()? xml web? xml web? <? versión xml = codificación = UTF? >? <versión de la aplicación web=xmlns=xmlns:xsi=instancia xsi:ubicación del esquema=app__xsd>? <! Configurar la clase de procesamiento del servicio web><servlet>
<servlet name>AxisServlet</servlet name><servlet class>Apache axis transport axis servlet</servlet class>& lt/servlet><servlet mapeo><servlet name>AxisServlet</servlet name><url patrón>/services /* </patrón de URL></mapeo de servlet>? <! ¿Configurar el filtro para dirección IP><Filter><Filter name>WebServiceFilter</filter name><Filter class>Server filterWebServiceFilter</filter class></ filter>< filter map>& lt filter name>WebServiceFilter</filter name> ¿Configuración del servidor? ¿Configuración del servidor? <? versión xml = codificación = UTF? >? <Deploy xmlns=xmlns:Java=><Configuración global><Parameter name=sendmultrefs value=true/><Parameter name=disablePrettyXML value=true/><Parameter name=contraseña de administrador valor = admin/> Nombre de parámetro = enablenamespacefixoptimization valor = false/> & ltNombre del parámetro = enviar valor de declaración XML = verdadero/>& ltNombre del parámetro = valor de sendXsiTypes = verdadero/> Adjunto impl/><Request stream><Handler type=java: controlador del eje Apache JWSHandler><Parameter name=scope value=session /></handler&
> Tipo de controlador = java: controlador del eje Apache JWSHandler </flujo de solicitud></configuración global><handler name=respondedor local type=Java:respondedor local del transporte del eje Apache/><handler name=URLMapper type=java:asignador de URL del controlador del eje Apache /><handler nombre = Tipo de autenticación =Java:Manejadores del eje Apache SimpleAuthenticationHandler/> <parameter name=enableRemoteAdmin value=false/><parameter name=nombre de clase valor=Utilidades del eje Apache Admin/><namespace>/namespace></service> ;< nombre del servicio = proveedor de versión = Java:RPC><parameter name=métodos permitidos valor=getVersion/><parameter name=nombre de clase valor=versión del eje Apache/></service>? <Transport name=><Flujo de solicitud><Handler type=Mapeador de URL/><handler type=Java:controlador del eje Apache httputhhandler/></flujo de solicitud><Parameter name= QS:valor de lista = Controlador qslist de transporte del eje Apache/& gt;& ltparameter name = QS:valor wsdl = transporte del eje Apache QSWSDLHandler/& gt;& ltparameter name = valor de la lista QS = controlador qslist del transporte del eje Apache/& gt;& ltparameter name = valor del método = transporte del eje Apache QSMethodHandler/& gt;& ltparameter name = QS :valor del método = transporte del eje Apache QSMethodHandler/& ltnombre del parámetro = valor wsdl de QS = controlador qswsdl del transporte del eje Apache/& /transport><transport name=local><r
ResponseFlow><Handler type=respondedor local/></response flow></transport><! Configure su propio servicio><service name=hola proveedor de servicio=Java:RPC><Parameter name=métodos permitidos value=*/><Parameter name=nombre de clase valor=servicio de servidor HelloServiceImpl/?? </servicio></implementación>? () ¿Código del servidor? HolaServiceImpl servidor de servicios web java? HolaServiceImpl java? Servicio de servidor de paquetes; clase pública HelloServiceImpl {? cadena pública hola (Cadena s) {? Devolver hola+s;? } }?WebServiceFilter filtro de filtro java? ¿WebServiceFilter java? Filtro de servidor de paquetes;? ¿Importar java io IOException? Importar filtro de servlet javax; importar servlet javax FilterChain importar servlet javax FilterConfig importar servlet javax ServletException importar servlet javax ServletRequest importar servlet javax ServletResponse importar servlet javax solicitud de servlet http Implementos de filtro Filtro {// No permitir el acceso a la dirección IP de; el servicio web? cadena final estática [] deniedIPList = nueva cadena [] { }; isip booleano público denegado (dirección IP de cadena) {? si (longitud de la lista IP denegada ==)? ¿Devolver falso? for(int I =;i<deniedIPListlength;i++){? if(deniedIPList[i] es igual a (ipAddr)){? ¿Devolver verdadero? } ?} ?Devolver falso? } ?public void destruir() {? } ?public void do filter(solicitud de servlet solicita respuesta de servlet RES?FilterChain cadena) lanza IOException ServletException {? solicitud de servlet http = (solicitud de servlet http)req; cadena clientIP = solicitud getRemoteHost()? Salida del sistema println(IP del cliente: +IP del cliente) Salida del sistema println(Iniciar filtrado...) if(isIPDenied(IP del cliente)){? Lanza una nueva ServletException (¡No tienes permiso para llamar a este servicio web!) ?}else{? ¿Filtro de cadena? } ?} ?public void init(FilterConfig arg) lanza ServletException {? } }?() ¿Código de cliente? ¿Probar el código de llamada dinámica del cliente Java? ¿Probar Java? Embalar
Cliente; importar URL importar modo de parámetro javax xml rpc; importar llamada del cliente del eje apache; Importar examen de clase pública XMLType de codificación del eje Apache {? public static void main (string args []) lanza excepción {servicio web _ usuario ()} servicio web público estático void _ usuario () lanza excepción {// ¿Crear un objeto de servicio a través de la clase que viene con el eje? servicio de servicio al cliente de apache axis = ¿nuevo servicio de cliente de apache axis ()? // ¿Crear objeto URL? string wsdl URL =//localhost:/servicio web _ Seguridad/servicios/hola servicio? wsdl//URL del servicio solicitado? url url = new URL(wsdlURL) // ¿Crear un objeto URL pasando la dirección wsdlURL a través del constructor de la clase URL? // ¿Crear el objeto de llamada del método de servicio y establecer las propiedades del objeto de llamada? Llamar Llamar = (Llamar)servicio crear Llamar()? Call SettargetedPointAddress(URL)//¿Establecer el atributo de URL solicitado para el objeto que llama? String serviceName = nombre del método del servicio helloweb? llamar a setOperationName (nombre del servicio) // ¿Establecer el atributo de nombre del método de llamada para el objeto que llama? Llamar a agregar parámetro (sxmltypexsd _ modo de parámetro de cadena en) // ¿Establecer el nombre del parámetro, el tipo de parámetro y el modo de parámetro del método para el objeto que llama? Call set returntype(xmltype Soap_string)//Establece el tipo de valor de retorno del método de llamada//? Llamar a setTimeout(new Integer( )) //Establecer límite de tiempo de espera//? //El nombre de usuario y la contraseña aquí corresponden al nombre de usuario y la contraseña en el archivo userlst en el directorio WEB INF ///? Llame a getMessageContext()set nombre de usuario(pantp)//? ¿Llamar a getMessageContext() y setPassword()? //// ¿Llamar al servicio web mediante el método de invocación? Cadena str = nueva cadena (pantp)? Salida del sistema println (comenzar a llamar al servicio web...)?string dept =(string)callin voke(new object[]{ str })// ¿Llamar al método de servicio? ¿Salida del sistema println (la llamada al servicio web finaliza...)? // ¿Imprimir los resultados devueltos? ¿El sistema sale println (el resultado devuelto es el siguiente+depto)}}? Prueba de seguridad () prueba normal (¿la dirección IP local no está dentro de la IP restringida)? Pruebe ingresando la dirección wsdl en el navegador
¿Ejecutar la prueba del cliente de prueba
Registro del cliente
Registro del servidor
? () ¿Prueba restringida (la dirección IP local está dentro de una IP restringida)? ¿Modificar la línea de código en la clase WebServiceFilter donde está la matriznegadaIPList, agregar la dirección IP y volver a publicar el proyecto? ¿La dirección IP de la matriz modificada es la siguiente? ¿Lista de direcciones IP restringidas? Cadena final estática [] deniedIPList = nueva cadena [] {};? Pruebe ingresando la dirección wsdl en el navegador
¿Ejecutar la prueba del cliente de prueba
Registro del cliente
Registro del servidor
? ¿Resumir? En este punto, la introducción a los artículos relacionados con la seguridad de los servicios web está completa.
? ¿Las medidas de implementación de seguridad de servicios web anteriores son relativamente simples? Todos también son bienvenidos a discutir Lishi News/Articles/Programs/Java/HX/201311/25712.