首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UsernameTokenValidator不能@Autowired

UsernameTokenValidator不能@Autowired
EN

Stack Overflow用户
提问于 2014-06-19 11:55:13
回答 2查看 610关注 0票数 0

我有一个spring,我使用Apahce-wss4j进行spring身份验证。我想在定制的TokenValidator类中使用Dao类。但是有一个例外,不能@我的Dao类。这是我的密码

applicationContext.xml

<bean id="myWssConfig" class="tr.com.xxx.services.MyWssConfig"/> <bean id="kepDBDAO" class="tr.com.xxx.dao.KepDBDAOImpl"/> <bean id="ssha" class="tr.com.xxx.utils.SSHA"/> <bean id="memberStatusService" class="tr.com.xxx.services.MemberStatusServiceImpl"/> <bean id="myUsernameTokenValidator" class="tr.com.xxx.services.MyUsernameTokenValidator"> <property name="kepDBDAO" ref="kepDBDAO"/> </bean>

代码语言:javascript
复制
<sws:interceptors>
    <bean class="org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor">
        <property name="validationActions" value="UsernameToken"/>
        <property name="validationCallbackHandler" ref="callbackHandler"/>
        <property name="wssConfig">
            <ref bean="myWssConfig"/>
        </property>
    </bean>
</sws:interceptors>

这是MyWssConfig.java

代码语言:javascript
复制
@Component("myWssConfig")
public class MyWssConfig extends WSSConfig {

    public MyWssConfig() {
        setValidator(WSSecurityEngine.USERNAME_TOKEN, MyUsernameTokenValidator.class);
        setRequiredPasswordType(WSConstants.PASSWORD_TEXT);
    }
}

这是MyUsernameTokenValidator.java

代码语言:javascript
复制
@Component
public class MyUsernameTokenValidator extends UsernameTokenValidator {


    private static final Logger LOGGER = LoggerFactory
            .getLogger(MyUsernameTokenValidator.class);

    @Autowired
    private KepDBDAO kepDBDAO;

    @Transactional
    protected void verifyPlaintextPassword(UsernameToken usernameToken, RequestData data) throws WSSecurityException {
        if (usernameToken != null && usernameToken.getPassword() != null) {   

            byte[] saltValue = null;
            kepDBDAO.getWsUsers("basvuru");
            String hashPassword = null;
            try {
                hashPassword = SSHA.calculateSSHA256(saltValue, usernameToken.getPassword());
            } catch (NoSuchAlgorithmException e) {
                LOGGER.error(e.toString(), e);
            } catch (IOException e) {
                LOGGER.error(e.toString(), e);
            }


            usernameToken.setPassword(hashPassword);


            super.verifyDigestPassword(usernameToken, data);
        }
    }

    public KepDBDAO getKepDBDAO() {
        return kepDBDAO;
    }

    public void setKepDBDAO(KepDBDAO kepDBDAO) {
        this.kepDBDAO = kepDBDAO;
    }
}

当我在SOAPUI中调用webservice时,无法@自动发送我的KepDBDAO。

帮帮我..。THank你们都来了。

EN

回答 2

Stack Overflow用户

发布于 2014-06-19 12:24:12

代码语言:javascript
复制
Try this:

1. In applicationContext:

<context:component-scan base-package="tr.com.xxx.dao"/> 
<context:component-scan base-package="package for MyUsernameTokenValidator"/>

remove these beans:

kepDBDAO, myUsernameTokenValidator

2. Remove setter and getter for KepDBDAO in MyUsernameTokenValidator 

3. Make sure KepDBDAOImpl is marked as @Service
票数 0
EN

Stack Overflow用户

发布于 2014-06-19 13:52:16

我解决了我的问题。

代码语言:javascript
复制
@Component("myWssConfig")
public class MyWssConfig extends WSSConfig {

    @Autowired
    private MyUsernameTokenValidator myUsernameTokenValidator;

    //
    @PostConstruct
    public void myInit() {
        setValidator(WSSecurityEngine.USERNAME_TOKEN, myUsernameTokenValidator);
        setRequiredPasswordType(WSConstants.PASSWORD_TEXT);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24305996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档