gpt4 book ai didi

java - 如何在加密之前使用 spring security 登录时获取普通用户凭据?

转载 作者:行者123 更新时间:2023-11-29 05:42:24 25 4
gpt4 key购买 nike

我正在开发具有高度隐私的网络应用程序。我想将每个用户的用户名和加密密码存储在数据库表中,并且我想将 AnonymousUserName 存储在另一个表中以关联个人详细信息。 AnonymousUserName 应该通过对真实用户名进行哈希处理并用明文密码对哈希进行加盐来创建。所以管理员不可能找到 AnonymousUserName,因为密码只是加密存储在数据库中。

尽管如此,我必须知道哪个 AnonymousUserName 属于登录用户。因此,我想在每次用户登录时对用户名进行哈希处理,并用普通密码对哈希进行加盐,并将生成的 AnonymousUserName 保存为 SessionAtribute,当用户离开应用程序时,它会再次被删除。

目前我的 Authentication-Manager 配置看起来非常简单。

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:repository="http://www.springframework.org/schema/data/repository"
xsi:schemaLocation="http://www.springframework.org/schema/data/repository http://www.springframework.org/schema/data/repository/spring-repository-1.5.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">


<http use-expressions="true" auto-config="true">
<intercept-url pattern="/login"
access="permitAll"/>
<access-denied-handler />
<form-login login-page="/login" default-target-url="/"/>
<logout />
</http>
<beans:bean id="encoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>
<authentication-manager>
<authentication-provider user-service-ref="jdbcUserService">
<password-encoder ref="encoder"/>
</authentication-provider>
</authentication-manager>

<beans:bean id="jdbcUserService"
class="de.tuberlin.livefeedback.dao.SpringSecurityDaoImpl">
<beans:property name="dataSource" ref="dataSource" />
<beans:property name="enableGroups" value="true" />
<beans:property name="enableAuthorities" value="false" />
<beans:property name="groupAuthoritiesByUsernameQuery">
<beans:value>SELECT R.idROLE, R.NAME, P.NAME
FROM ROLE R
JOIN USER_ROLE RM on R.idROLE = RM.user_role_role
JOIN USER U on U.idUSER = RM.user_role_user
JOIN ROLE_PERMISSION RP ON RP.role_permission_role = R.idROLE
JOIN PERMISSION P ON P.idPERMISSION = RP.role_permission_permission
WHERE U.login=?

</beans:value>
</beans:property>
<beans:property name="usersByUsernameQuery">
<beans:value>select login,password,enabled from USER where login = ?
</beans:value>
</beans:property>
<beans:property name="authoritiesByUsernameQuery">
<beans:value>SELECT U.login, P.name FROM USER U, PERMISSION P WHERE U.login = ? AND P.idPERMISSION IN
(SELECT role_permission_permission FROM ROLE_PERMISSION WHERE role_permission_role IN
(SELECT user_role_role FROM USER_ROLE WHERE user_role_user=
(SELECT idUSER FROM USER WHERE login = ? LIMIT 1)))
</beans:value>
</beans:property>
</beans:bean>
</beans:beans>

我的想法是在用户使用他的凭据登录时覆盖处理 httpRequest 的方法,如下面的伪代码应该说明:

@Override
void authenticate (String username, String password){
String anonymousUserName = hash(username, password);
httpSession.setAttribute("anonymousUserName", anonymousUserName);
super(username, password) //to do the authentication-stuff
}

因为我不知道是否有任何方法可以通过这种方式覆盖以及在哪里可以找到,所以我正在写这个问题。

那么,有没有可能以类似的方式做我想做的事情?

谢谢你的期待

最佳答案

你可以使用 AuthenticationSuccessHandler并在其 onAuthenticationSuccess(request, response, authentication) 中实现您的逻辑方法,您可以在其中获取所有必要的信息/对象。

在实践中,这意味着子类化 SavedRequestAwareAuthenticationSuccessHandler它由默认配置使用,并且您很可能希望保留其实现的行为。然后在配置中,您可以将该类与 <form-login authentication-success-handler-ref="..."> 连接起来。属性。

关于java - 如何在加密之前使用 spring security 登录时获取普通用户凭据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17026931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com