如何使用我自己的机制自定义 spring-security 身份验证过程

Posted

技术标签:

【中文标题】如何使用我自己的机制自定义 spring-security 身份验证过程【英文标题】:how to custom spring-security authentication process with my own mechanism 【发布时间】:2015-08-27 06:12:13 【问题描述】:

我正在尝试使用 spring security 来保护我的应用程序。

我对 Spring Security 的理解是,他们会根据用户输入的密码检查从 UserDetails 加载的密码。

问题是我的登录验证是将用户名和密码输入到将返回结果代码的 pl/sql 函数中。所以我无法从数据库中获取密码。

int resultCode = (Integer) jt().execute(
            "? = call sec$utils.verify_password(?, ?, ?, ?) ",
            new CallableStatementCallback()
            ...
            stmt.setString(3, username);
            stmt.setString(4, password);
            stmt.execute();
            return stmt.getInt(5););

在 Spring Security 中有没有一种方法可以自定义身份验证过程,以便我可以跳过 loadUserByUsername 并仅使用我的结果代码作为身份验证结果?

请,任何帮助将不胜感激

【问题讨论】:

做你的研究 Leo,你可以通过搜索和阅读自己回答问题,Spring 提供了大量的文档和教程来确定你是否需要 Spring Security。 对不起,我还是新手。但我确实已经对此进行了近 4 天的研究。形成我从 spring 文档中得到的想法,我不确定,但我觉得 spring-security 验证身份验证请求的方式不能满足我的需要。只是想知道这里的人们可能有一些技巧可以使弹簧安全性适用于我的情况。或者至少,他们可以给我一些建议。 你可以写一个 AuthenticationProvider 来做这个。如果您不需要有关用户的任何其他信息,则只需检查结果并返回从用户名构造的 User 对象(例如,具有默认角色)。 谢谢@LukeTaylor,在您发表评论之前,我对此一无所知。我对 AuthenticationProvider 做了一些研究。我认为你的想法应该可行。 【参考方案1】:

首先。从服务器端应用程序的数据库中获取密码不易受攻击。因为如果你可以访问表格数据,那么它就没有用了。

错误的概念 - Spring 安全性不是从数据库返回结果代码。

它是关于身份验证和授权的。您可以为特定用户集启用登录和访问各种 url。它将用户信息保存在一个静态类中,以便spring security可以识别用户的角色。

然后是关于春季安全的。它仍然在路线图中。但是如果你需要一些更高级的框架,你必须关注[Apache Shiro][1]

如果您想知道如何设置弹簧安全性。 link 高度可定制。

【讨论】:

以上是关于如何使用我自己的机制自定义 spring-security 身份验证过程的主要内容,如果未能解决你的问题,请参考以下文章

Shibboleth 与自定义 Web 应用程序自己的 SignOn 机制

Spring Oauth2 - 自定义异常处理程序

注解机制的分类使用及原理详解,开始自定义一个自己的注解

vue自定义指令及应用场景

QT内省机制自定义Model数据库

(转)quick中自定义事件