我想用Spring Security实现Spring 4 MVC应用程序的登录/注销(认证/授权)系统。
目前我使用一个非常简单的手工实现,除了通过使用自定义服务方法通过用户名查找用户并比较加密密码,将输入的用户名和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。
阅读Spring Security的官方教程(http://docs.spring.io/spring-security/site/docs/4.0.4.RELEASE/reference/htmlsingle/#tech-userdetailsservice)对我来说,对Login服务方法进行身份验证的方式并不清楚。
本教程讨论了直接针对数据库的身份验证,但是我找不到任何关于使用Service方法执行身份验证的信息,在我的分层架构中,数据库隐藏在Servoce和Dao(Hibernate)层之后。
本教程中的大多数示例都使用基于XML而不是基于Java的配置,我将其用于我的应用程序。 在搜索引擎搜索了很多之后,我仍然没有找到一个教程,它使用一个熟悉的使用Service和Dao层的分层结构在Spring MVC应用程序中实现Spring Security。
我是否需要绕过Service和DAO / Hibernate层并针对数据库验证目录?或者编写实现UserDetailsService的自定义身份验证提供程序,如本文所述? Spring Security 3 database authentication with Hibernate
仅使用基于Java的配置来配置Spring Security吗?我对这个问题感到有点失落,所以我希望得到一些提示......