xfire webService 加入用户名密码验证 02

1.需要的jar包


除了xfire和spring必要的包外 还需要 wss4j-1.5.1.jar 和 commons-codec-1.3.jar

2.servicebean配置如下

<bean name="ticketcheckService" class="org.codehaus.xfire.spring.ServiceBean">
<property name="serviceBean" ref="ticketcheckWS" />
<property name="name" value="checkTicket"></property>
<property name="serviceClass"
value="ticketcheck.service.IticketCheck" />
<property name="inHandlers">
<list>
<ref bean="addressingHandler" />
<ref bean="domInHandler" />
<ref bean="wss4jHandler" />
</list>
</property>


<property name="properties">
<props>

<!-- 等待HttpConnectionManager从连接池中返回空闲连接的超时时间 -->

<prop key="http.connection.manager.timeout">2000</prop>

<!-- 等待建立连接的超时时间 -->

<prop key="http.connection.manager.timeout">3000</prop>

<!-- 等待服务器返回数据超时时间 -->

<prop key="http.connection.manager.timeout">5000</prop>

<!-- 连接到单个服务器的连接数上限 -->

<prop key="http.connection.manager.timeout">10</prop>

<!-- 连接到所有服务器的连接个数上限 -->

<prop key="http.connection.manager.timeout">30</prop>

</props>

</property>


</bean>


<bean id="addressingHandler" class="org.codehaus.xfire.addressing.AddressingInHandler" />
<bean id="domInHandler" class="org.codehaus.xfire.util.dom.DOMInHandler" />


<bean id="wss4jHandler" class="org.codehaus.xfire.security.wss4j.WSS4JInHandler" >
<property name="properties">
<!--
<props>
<prop key="action">UsernameToken</prop>
<prop key="passwordCallbackClass">ticketcheck.service.impl.PasswordHandlerImpl</prop>
</props>
-->
<map>
<entry key="action" value="UsernameToken"></entry>
<entry key="passwordCallbackRef" value-ref="securityHandler" > </entry>
</map>
</property>
</bean>
<bean id="securityHandler" class="ticketcheck.service.impl.PasswordHandlerImpl">
<property name="userInfo">
<map>
<entry key="user1" value="pwd1"></entry>
<entry key="user2" value="pwd2"></entry>
</map>
</property>
</bean>
这里 在wss4jHandler配置中原先 用<props> 是无法实现passwordCallback的bean 注入(应用properties值都是字符的所以passwordCallbackRef 在<props>中是不起作用的)

下面就是实现securityHandler



3.PasswordHandlerImpl



import java.io.IOException;
import java.util.HashMap;


import org.apache.ws.security.WSConstants;
import org.apache.ws.security.WSPasswordCallback;
import org.apache.ws.security.WSSecurityException;




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


/**
* 验证用户密码
*/


public class PasswordHandlerImpl implements CallbackHandler {
private HashMap<String, String> userInfo ; //保存的用户名密码信息

public void setUserInfo(HashMap<String, String> userInfo) {
this.userInfo = userInfo;
}

public void handle(Callback[] callbacks) throws IOException,
UnsupportedCallbackException {
WSPasswordCallback callback = (WSPasswordCallback) callbacks[0]; //获取回调对象
String id = callback.getIdentifer();//获取用户名
String validPw = userInfo.get(id);
if(validPw == null){
throw new WSSecurityException("no such user");
}

if (WSConstants.PASSWORD_TEXT.equals(callback.getPasswordType())) {//如果是明文密码直接进行判断
String pw = callback.getPassword();
if (pw == null || !pw.equalsIgnoreCase(validPw)) {
throw new WSSecurityException("password not match");
}
} else {//如果是密码摘要,向回调设置正确的密码(明文密码)这段主要是在service客户端用到
callback.setPassword(validPw);
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值