`
PKI_Gavin
  • 浏览: 21227 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

一个简单的用户口令验证机制

    博客分类:
  • JAVA
阅读更多
1.修改WebService 服务端 spring 配置文件 ws-context.xml
Xml代码
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:jaxws="http://cxf.apache.org/jaxws" 
    xsi:schemaLocation="http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans.xsd" 
    default-autowire="byName" default-lazy-init="true"> 
      
    <jaxws:endpoint id="webServiceSample" 
        address="/WebServiceSample" implementor="cn.org.coral.biz.examples.webservice.WebServiceSampleImpl"> 
 
        <jaxws:inInterceptors> 
            <bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" /> 
            <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor"> 
                <constructor-arg> 
                    <map> 
                        <entry key="action" value="UsernameToken" /> 
                        <entry key="passwordType" value="PasswordText" /> 
                        <entry key="passwordCallbackClass" value="cn.org.coral.biz.examples.webservice.handler.WsAuthHandler" /> 
                    </map> 
                </constructor-arg> 
            </bean> 
        </jaxws:inInterceptors>     
 
    </jaxws:endpoint> 
      
</beans> 



2.服务端添加passwordCallbackClass回调类,该类进行用户口令验证:
Java代码
package cn.org.coral.biz.examples.webservice.handler;

import java.io.IOException;

import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;

import org.apache.ws.security.WSPasswordCallback;

public class WsAuthHandler implements CallbackHandler{

public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
if (pc.getIdentifer().equals("ws-client")){
if (!pc.getPassword().equals("admin")) {
throw new SecurityException("wrong password");
}
}else{
throw new SecurityException("wrong username");
}
}

}

package cn.org.coral.biz.examples.webservice.handler;

import java.io.IOException;

import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;

import org.apache.ws.security.WSPasswordCallback;

public class WsAuthHandler implements CallbackHandler{

public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
if (pc.getIdentifer().equals("ws-client")){
if (!pc.getPassword().equals("admin")) {
throw new SecurityException("wrong password");
}
}else{
throw new SecurityException("wrong username");
}
}

}


3.客户端修改spring 配置文件 wsclient-context.xml 如下:
Xml代码
<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:jaxws="http://cxf.apache.org/jaxws" 
    xsi:schemaLocation="http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans.xsd" 
    default-autowire="byName" default-lazy-init="true"> 
 
 
    <!-- ws clinet --> 
    <bean id="webServiceSampleClient" class="cn.org.coral.biz.examples.webservice.WebServiceSample" 
        factory-bean="webServiceSampleClientFactory" factory-method="create" /> 
 
 
    <bean id="webServiceSampleClientFactory" 
        class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean"> 
        <property name="serviceClass" 
            value="cn.org.coral.biz.examples.webservice.WebServiceSample" /> 
        <property name="address" 
            value="http://88.148.29.54:8080/aio/services/WebServiceSample" /> 
        <property name="outInterceptors"> 
            <list> 
                <bean 
                    class="org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor" /> 
                <ref bean="wss4jOutConfiguration" /> 
            </list> 
        </property> 
    </bean> 
 
    <bean id="wss4jOutConfiguration" 
        class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor"> 
        <property name="properties"> 
            <map> 
                <entry key="action" value="UsernameToken" /> 
                <entry key="user" value="ws-client" /> 
                <entry key="passwordType" value="PasswordText" /> 
                <entry> 
                    <key> 
                        <value>passwordCallbackRef</value> 
                    </key> 
                    <ref bean="passwordCallback" /> 
                </entry> 
            </map> 
        </property> 
    </bean> 
    <bean id="passwordCallback" 
        class="cn.org.coral.biz.examples.webservice.handler.WsClinetAuthHandler"> 
    </bean> 
 
</beans> 

4.客户端添加passwordCallback类,通过该类设置访问口令
Java代码
package cn.org.coral.biz.examples.webservice.handler;

import java.io.IOException;

import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;

import org.apache.ws.security.WSPasswordCallback;

public class WsClinetAuthHandler implements CallbackHandler{


public void handle(Callback[] callbacks) throws IOException,
UnsupportedCallbackException {
for (int i = 0; i < callbacks.length; i++) {
WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
int usage = pc.getUsage();


System.out.println("identifier: " + pc.getIdentifer());
System.out.println("usage: " + pc.getUsage());
if (usage == WSPasswordCallback.USERNAME_TOKEN) {
// username token pwd...
pc.setPassword("admin");

} else if (usage == WSPasswordCallback.SIGNATURE) {
// set the password for client's keystore.keyPassword
pc.setPassword("keyPassword");
}
}
}

}

package cn.org.coral.biz.examples.webservice.handler;

import java.io.IOException;

import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;

import org.apache.ws.security.WSPasswordCallback;

public class WsClinetAuthHandler implements CallbackHandler{


public void handle(Callback[] callbacks) throws IOException,
UnsupportedCallbackException {
for (int i = 0; i < callbacks.length; i++) {
WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
int usage = pc.getUsage();


System.out.println("identifier: " + pc.getIdentifer());
System.out.println("usage: " + pc.getUsage());
if (usage == WSPasswordCallback.USERNAME_TOKEN) {
// username token pwd...
pc.setPassword("admin");

} else if (usage == WSPasswordCallback.SIGNATURE) {
// set the password for client's keystore.keyPassword
pc.setPassword("keyPassword");
}
}
}

}


5.junit单元测试程序:
Java代码
package cn.org.coral.biz.examples.webservice;

import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
import org.springframework.util.Assert;

public class TestWebService extends AbstractDependencyInjectionSpringContextTests {
WebServiceSample webServiceSampleClient;

@Override
protected String[] getConfigLocations() {
setAutowireMode(AUTOWIRE_BY_NAME);
return new String[] { "classpath:/cn/org/coral/biz/examples/webservice/wsclient-context.xml" };
}

/**
* @param webServiceSampleClient the webServiceSampleClient to set
*/
public void setWebServiceSampleClient(WebServiceSample webServiceSampleClient) {
this.webServiceSampleClient = webServiceSampleClient;
}

public void testSay(){
String result = webServiceSampleClient.say(" world");
Assert.hasText(result);
}
}

package cn.org.coral.biz.examples.webservice;

import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
import org.springframework.util.Assert;

public class TestWebService extends AbstractDependencyInjectionSpringContextTests {
WebServiceSample webServiceSampleClient;

@Override
protected String[] getConfigLocations() {
setAutowireMode(AUTOWIRE_BY_NAME);
return new String[] { "classpath:/cn/org/coral/biz/examples/webservice/wsclient-context.xml" };
}

/**
* @param webServiceSampleClient the webServiceSampleClient to set
*/
public void setWebServiceSampleClient(WebServiceSample webServiceSampleClient) {
this.webServiceSampleClient = webServiceSampleClient;
}

public void testSay(){
String result = webServiceSampleClient.say(" world");
Assert.hasText(result);
}
}
分享到:
评论
3 楼 sskhnje 2008-08-19  
我也期望你的回复,,,
2 楼 fireflylover 2008-06-18  
我也遇着同样问题,希望可以解答
1 楼 limaoyuan 2008-06-06  
完全按你的方式做的,抛出了下面的异常,是不是有什么冲突?
信息: Creating Service {http://demo.com/}HelloWorldService from class com.demo.HelloWorld
context: org.springframework.context.support.ClassPathXmlApplicationContext@1ffb8dc: display name [org.springframework.context.support.ClassPathXmlApplicationContext@1ffb8dc]; startup date [Fri Jun 06 02:11:04 GMT 2008]; root of context hierarchy
2008-6-6 2:11:26 org.apache.cxf.phase.PhaseInterceptorChain doIntercept
信息: Interceptor has thrown exception, unwinding now
org.apache.cxf.binding.soap.SoapFault: SOAPEXCEPTION
at org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor.handleMessage(SAAJOutInterceptor.java:83)
at org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor.handleMessage(SAAJOutInterceptor.java:57)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:221)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:276)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:222)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:177)
at $Proxy16.sayHi(Unknown Source)
at com.demo.Client.main(Client.java:14)
Caused by: javax.xml.soap.SOAPException: Failed to create MessageFactory: org.apache.axis.soap.MessageFactoryImpl
at javax.xml.soap.MessageFactory.newInstance(MessageFactory.java:55)
at org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor.handleMessage(SAAJOutInterceptor.java:71)
... 8 more
Caused by: java.lang.ClassNotFoundException: org.apache.axis.soap.MessageFactoryImpl
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at javax.xml.soap.MessageFactory.newInstance(MessageFactory.java:50)
... 9 more
Exception in thread "main" javax.xml.ws.WebServiceException: Cannot create SAAJ factory instance.
at org.apache.cxf.jaxws.binding.soap.SOAPBindingImpl.getSOAPFactory(SOAPBindingImpl.java:118)
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:193)
at $Proxy16.sayHi(Unknown Source)
at com.demo.Client.main(Client.java:14)
Caused by: javax.xml.soap.SOAPException: Failed to create SOAPConnectionFactory: org.apache.axis.soap.SOAPFactoryImpl
at javax.xml.soap.SOAPFactory.newInstance(SOAPFactory.java:46)
at org.apache.cxf.jaxws.binding.soap.SOAPBindingImpl.getSOAPFactory(SOAPBindingImpl.java:113)
... 3 more
Caused by: java.lang.ClassNotFoundException: org.apache.axis.soap.SOAPFactoryImpl
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at javax.xml.soap.SOAPFactory.newInstance(SOAPFactory.java:41)
... 4 more






如果添加了axis包后会抛下面异常:
2008-6-6 2:07:55 org.apache.cxf.phase.PhaseInterceptorChain doIntercept
信息: Interceptor has thrown exception, unwinding now
org.w3c.dom.DOMException: No such Localname for SOAP URI
at org.apache.axis.message.SOAPDocumentImpl.createElementNS(SOAPDocumentImpl.java:379)
at org.apache.axis.SOAPPart.createElementNS(SOAPPart.java:1109)
at org.apache.cxf.staxutils.W3CDOMStreamWriter.writeStartElement(W3CDOMStreamWriter.java:98)
at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.writeSoapEnvelopeStart(SoapOutInterceptor.java:95)
at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.handleMessage(SoapOutInterceptor.java:76)
at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.handleMessage(SoapOutInterceptor.java:57)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:221)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:276)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:222)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:177)
at $Proxy16.sayHi(Unknown Source)
at com.demo.Client.main(Client.java:14)
Exception in thread "main" java.lang.NoSuchMethodError: javax.xml.soap.SOAPFactory.createFault()Ljavax/xml/soap/SOAPFault;
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:193)
at $Proxy16.sayHi(Unknown Source)
at com.demo.Client.main(Client.java:14)


期待你的回复

相关推荐

    C C++实现网络验证和本地验证

    这个项目可以方便的让你在你的共享收费程序里面添加验证机制。提供的多种灵活性收费控制项目。 此服务支持生成分钟和天数序列卡,可以让用户通过序列卡充值.支持在线用户管理以及日志,支持以下特性 网络验证支持...

    servlet实现简单登录验证

    servlet实现简单登录验证,最简单的实现,通过equals()方法然后重定向,主要是理解servlet的运行机制

    iOS用户密码认证机制

    iMAS App Password框架提供一个简单的方式让你的应用支持密码验证。它具有加强密码强度的的逻辑,能应对输入的任意一种密码。提供两种类型的密码控件,一个是简单的数字类型,一个是复杂的数字和字符组合类型。app-...

    数据库安全机制.doc

    功能完善的标识与鉴别机制也是 访问控制机制有效实施的基础,特别是在一个开放的多用户系统的网络环境中,识别与 鉴别用户是构筑DBMS安全防线的第1个重要环节。 近年来一些实体认证的新技术在数据库系统集成中得到...

    改进儿童在图形认证机制方面的认证实践(计算机博士论文英文参考资料).pdf

    我的研究包括为儿童设计,开发和评估一种新的图形用户身份验证机制,其中儿童选择一系列图片作为密码。在我们的研究中,这种名为KidsPic的机制允许儿童(6-11岁)比字母数字密码更好地创建和记住他们的密码。

    基于token的登陆验证机制.docx

    在cookie中写入一个Session_id的值,这个值用于标识这个内存空间。 下次用户再来访问的话会带着这个cookie中的session_id,服务器拿着这个id去寻找对应的session,如果session中已经有了这个用户的 登陆信息,则说明...

    U盘身份安全认证示例,包括U盘注册和登录检测两个Demo

    本示例使用两个Demo来演示简单实用的U盘身份安全认证机制,每个U盘都有一个唯一的硬件序列号,对这个序列号进行加密处理,生成合法的注册信息,作为身份识别标志,再通过传统的用户口令认证模式,实现一个完善的安全...

    .net core 3.1 WepApi 前后分离身份验证及webapi调试demo ,jwt+swagger

    移动端使用的往往不是网页技术,使用Cookie验证并不是一个好主意,因为你得和Cookie容器打交道,而使用Bearer验证则简单的多。 无状态化 JWT 是无状态化的,更适用于 RESTful 风格的接口验证。 它的缺点也很...

    论文研究-一种动态口令身份认证协议的设计与研究.pdf

    动态口令用户认证机制是当前身份认证技术发展的一个重要方面,在分析了SAS-2和2GS两种动态口令用户认证协议的基础上,提出了一种更安全的动态口令用户认证协议。该协议不仅能有效地抵御SAS-2协议不能抵御盗取验证...

    User-Authentication-Mechanism-Linux:在Linux中模拟用户身份验证机制的AC程序

    用户身份验证机制Linux 在Linux中模拟用户身份验证机制的AC程序怎么跑gcc -o test Mechanism.c -lcrypt #解决方案定义登记() 输入用户名和密码(长度&gt; 4)。 将打开文件shadow.txt,以将您输入的用户名与文件中的...

    数据库系统的安全机制.doc

    用户标识是指用户向系统出示自己的身份证明,最简单的方法是输入用户 ID和密码,系统验证其是否合法。标识机制用于唯一标志进入系统的每个用户的身份, 因此必须保证用户身份的唯一性。鉴别是指系统检查验证用户的...

    Windows终端服务的Kerberos化验证

    异构环境的管理员所面对的一个主要挑战是跨不同系统拥有统一的用户 ID 和密码,最好具有集中的身份验证服务器。Microsoft:registered: Windows Server 版本提供了一个称为 Terminal Services 的工具,在 Windows ...

    号令双因素动态密码身份认证解决方案

    号令是根据专门的算法每隔30秒生成一个与时间相关的、不可预测的随机数字组合(One-time Password),每个口令只能使用一次,每天可以产生2880个密码。用户进行认证时候,除输入账号和静态密码之外,必须要求输入...

    ASP具有动态口令认证机制的网上投票系统的设计(源代码+thesis).zip

    项目是基于ASP.NET的Web应用程序开发,旨在构建一个高性能、可扩展和可靠的在线平台。我们将使用ASP.NET MVC框架和C#编程语言来实现这个项目。 ASP.NET MVC是一种成熟的开发框架,它采用模型-视图-控制器的设计模式...

    Linux下命令行安装weblogic

    3、为weblogic用户设置密码:为weblogic用户设置密码passwd weblogic输入两次用户口令,口令更新(此处输入的口令为weblogic)完成(报如图错误时不必关心,由于是root用户可以不受验证机制的约束,即便出来“BAD ...

    Shinymanager:简单安全的身份验证机制,适用于单个有光泽的应用程序

    单个“发光”应用程序的简单安全认证机制。 凭据存储在加密的“ SQLite”数据库中。 使用“ scrypt” R包对密码进行哈希处理。 主应用程序的源代码受保护,直到身份验证成功为止。 现场演示: 在Shiny服务器上: ...

    异常机制分析

    C++的异常

    图形用户界面(Java/GUI):用户登陆界面-代码

    通过图形界面输入用户和密码,将用户名和密码发送到服务器端,服务器端存放有用户文件(建议每行存放一个用户名和密码), 服务端将收的用户名和密码对照用户文件验证,如果一致,则返回消息到客户端,在界面显示欢迎...

    了解用户和组账户与DB2 UDB的交互

    身份验证就是使用安全机制验证所提供用户ID和口令的过程。用户和组身份验证由DB2 UDB外部的设施管理,比如操作系统、域控制器或者Kerberos安全系统。这和其他数据库管理系统是不同的,如Oracle和SQL Server,后者既...

    让一个普通的Linux用户转换成为管理员

    这个命令的意思是代替用户(Subsititute user)但是在以前常被一些黑客用来转换成为管理员(ROOT)身份,因此这个命令也被成为超级用户(SUQER USER)SU命令的参数是要转换成为的用户名...如果root口令失密,系统将会受...

Global site tag (gtag.js) - Google Analytics