使用MyBatis进行Spring安全身份验证

时间:2011-11-16 14:35:15

标签: spring-security mybatis

我正在尝试使用MyBatis执行Spring Security身份验证。

我的spring-security文件如下所示

        <global-method-security pre-post-annotations="enabled" />

       <beans:bean id="myUserService"                    
                 class="com.service.CustomService" />

            <authentication-manager>
                <authentication-provider user-service-ref="myUserService" />
            </authentication-manager>

我的CustomService类implements UserDetailsService,在loadUserByUsername方法中,我使用MyBatis Dao从数据库加载用户。

@Autowired
private MyBatisDao dao;

在我的Controller类中,我使用相同的注释,在这种情况下,它返回正确的对象。

但是当我在CustomService类中使用它时,它返回null

我无法理解它的原因。我错过了什么。请帮忙

任何使用MyBatis的Spring身份验证示例都会有所帮助,我可以理解它,然后可能会发现问题

2 个答案:

答案 0 :(得分:1)

我用另一种方法解决了这个问题 - 不推荐的方式。

在这种情况下,@ console可以正确处理数据库工作, 所以我在控制器中执行基本身份验证并将结果发送到自定义服务。 在这种情况下,自定义服务没有有效的身份验证功能。 如果useename和密码有效,则调用自定义服务, 并且只返回虚拟身份验证结果。 如果用户名和密码无效,我只是没有在控制器中调用auth。

虽然它不是很正确的方式,但对于用户角色的一些特殊处理它可以正常工作。 我想知道有更好的方法来解决这个问题, 但我现在没有时间找到。

答案 1 :(得分:0)

通过在构建MyBatis对象时采用替代方法解决了问题。

我创建了一个单例类,它返回SqlSessionFactory对象,并在我的代码中使用它来调用Mapper接口方法。

下面的示例代码段

InputStream myBatisConfigStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("config.xml"); 

    if (null == sqlSessionFactory){

        sqlSessionFactory = new SqlSessionFactoryBuilder().build(myBatisConfigStream);
        sqlSessionFactory.getConfiguration().addMapper(IOMapper.class);
    }

    try {

        myBatisConfigStream.close();
    } catch (IOException e) {

        e.printStackTrace();
    }

    public static SqlSessionFactory getSqlSessionFactory() {

    return sqlSessionFactory;
}

config.xml文件仅包含dataSource。

希望这有帮助。