【发布时间】:2014-03-19 20:39:58
【问题描述】:
我的要求如下:
在我们的应用程序中,用户的凭据首次根据数据库进行验证(不使用 Spring Security,因为它是一个遗留应用程序)。如果用户是有效用户,他将登录到应用程序。一旦用户登录到应用程序,他就可以拨打很少的休息电话。现在,我想在进行任何休息调用之前再次使用 Spring Security 验证用户的凭据。在这里,挑战是我们不应该重新设计数据库模式。我们需要使用一个存储过程来验证用户。如果身份验证失败,此特定存储过程将返回错误消息,否则不返回任何内容。在这种情况下没有定义角色。只是使用存储过程的简单身份验证。现在,我想通过 spring security 来完成这一切。可能正在编写一个 java 类/自定义 spring 框架的类,其中调用存储过程并在 spring 安全配置文件中使用该类。有人可以建议如何开始吗?
我已经实现了 AuthenticationProvider。以下是*security.xml。
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/rest/*" access="permitAll"></intercept-url>
</http>
<authentication-manager >
<authentication-provider ref="csAuthenticationProvider" />
</authentication-manager>
但是,安全框架正在寻找角色。就我而言,没有定义角色。前面说了,用户第一次认证,没有使用spring框架。如果用户想要进行任何休息调用,spring security 需要重新对用户进行身份验证。这并不意味着用户需要重新输入凭据。用户的凭据在其余调用/请求中可用,因为他已经过身份验证。唯一需要做的是我需要通过使用请求来使用凭据并使用存储过程重新验证。当然,使用 AuthenticationProvider 可能是个好主意,但是 authenticate(Authentication authentication) 方法的参数“Authentication authentication”对我没有用,因为我需要再次调用自己的存储过程调用。我暂时没有使用Authentication对象,而是使用authenticate()方法中的存储过程调用代码。但是,奇怪的是,authenticate() 方法没有被调用。我很惊讶,也很困惑。有没有人知道我在哪里做错了?
【问题讨论】:
-
如果有人可以分享我的问题的伪代码,那就太好了。
-
请更具体地描述你在做什么。您说“安全框架正在寻找角色”。那是什么意思?实际调用的是什么代码?还要说明如果没有可用的凭据并且您不希望用户提供任何凭据,您希望 Spring Security 如何对用户进行身份验证。如果您希望只使用与他们登录时相同的 HTTP 会话,那么当您对用户进行身份验证时,您需要创建一个 Spring Security 可以用于未来请求的安全上下文。
-
Luke,谢谢!,“安全框架正在寻找角色”:意思是根据我的要求,不需要验证角色。当用户第一次登录时,用户输入的凭据存储在请求对象中。我需要使用这些凭据并使用spring security(通过存储过程调用)重新进行身份验证。我可以在用户登录时使用相同的 HTTP 会话。请指导我如何获取相同的 HTTP 会话、创建 Spring Security 上下文并根据上述要求重新进行身份验证。如果能分享一些伪代码就好了。
标签: java spring security spring-security