我正在尝试使用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身份验证示例都会有所帮助,我可以理解它,然后可能会发现问题
答案 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。
希望这有帮助。