通过Spring 4和Hibernate使用/配置Spring安全性

通过Spring 4和Hibernate使用/配置Spring安全性,spring,spring-security,Spring,Spring Security,我想用SpringSecurity实现我的Spring4MVC应用程序的登录/注销(身份验证/授权)系统 目前,我使用了一个非常简单的手工实现,它基本上只是通过使用自定义服务方法按用户名查找用户并比较加密密码,将输入的用户名和MD5哈希密码与数据库值进行比较 如果密码匹配,则登录成员的用户名将保存在会话中,并且ControllerAdvice会在每次请求之前使用会话中的用户名查找用户的成员对象。checkLogin方法返回true,即用户名和密码匹配: @Service("loginServic

我想用SpringSecurity实现我的Spring4MVC应用程序的登录/注销(身份验证/授权)系统

目前,我使用了一个非常简单的手工实现,它基本上只是通过使用自定义服务方法按用户名查找用户并比较加密密码,将输入的用户名和MD5哈希密码与数据库值进行比较

如果密码匹配,则登录成员的用户名将保存在会话中,并且ControllerAdvice会在每次请求之前使用会话中的用户名查找用户的成员对象。checkLogin方法返回true,即用户名和密码匹配:

@Service("loginService")
@Transactional
public class LoginServiceImpl implements LoginService {

private MemberDao dao;

//more methods

@Override
public boolean checkLogin(String username, String password) {

    String hashedPassword = getPasswordHash(password);
    return dao.checkLogin(username, hashedPassword);

}
}
这确实有效,但不是一个非常优雅的解决方案,不能处理不同的角色,并且可能不太安全。此外,我想熟悉Spring Security

阅读springsecurity()的官方教程时,我并不清楚如何根据登录服务方法进行身份验证

本教程讨论了直接针对数据库的身份验证,但我找不到任何关于使用服务方法执行身份验证的信息,在我的分层体系结构中,数据库隐藏在Servoce和Dao(Hibernate)层后面

此外,本教程中的大多数示例使用基于XML的配置,而不是我在应用程序中使用的基于Java的配置。 在使用搜索引擎进行了大量搜索之后,我仍然没有找到一个教程,该教程使用熟悉的分层结构(使用服务和Dao层)在SpringMVC应用程序中实现Spring安全性

我是否需要绕过服务层和DAO/Hibernate层,并根据数据库对目录进行身份验证?或者编写一个自定义身份验证提供程序来实现本文中描述的UserDetailsService?


是否只可以使用基于Java的配置来配置Spring安全性?我对这个问题有点不知所措,所以希望得到一些提示…

您是否尝试过自定义身份验证提供程序?这是使用基于xml的配置创建的。自定义身份验证提供程序可能是一个可行的解决方案,但不能解决我的所有问题。绕过服务层和DAO/Hibernate层直接针对数据库进行身份验证是一种糟糕的做法吗?我感觉不太好…我将DaoAuthenticationPRovider与UserDetailsService(从Dao/Hibernate层获取用户信息)结合使用,现在工作正常。