我试图用MySQL中的一个数据库在Spring Web应用程序登录中训练哈希,但当我引入正确的密码时,登录名总是用?error=true再次发送我到登录名。
我确定,如果我把我在表'users'中的密码(即散列密码)准确地放入,我就可以正确地访问主页。由于项目的规范,所有的配置都是在XML文件中进行的。我是Spring的新手,我无法确定上下文文件中的错误在哪里。我使用两个身份验证提供者,但我只需要在其中一个中使用BCrypt enconder。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.2.xsd">
<!-- Rutas que se ignoraran -->
<security:http pattern="/css/**" security="none"/>
<security:http pattern="/assets/**" security="none"/>
<security:http pattern="/img/**" security="none"/>
<security:http pattern="/js/**" security="none"/>
<security:http pattern="/login*" security="none"/>
<security:http pattern="/recovery/*" security="none"/>
<security:http pattern="/recovery/initRecovery/*" security="none"/>
<security:http pattern="/lock*" use-expressions="true" auto-config="true">
<security:intercept-url pattern="/lock*" access="permitAll" />
</security:http>
<security:http
auto-config="true" use-expressions="true"
authentication-manager-ref="authenticationManager"
access-denied-page="/denegado" >
<security:intercept-url pattern="/**" access="isAuthenticated()" />
<security:form-login login-page="/login" default-target-url="/init" authentication-failure-url="/loginfailed" />
<security:logout invalidate-session="true" logout-success-url="/" />
</security:http>
<bean id="encoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder">
<constructor-arg name="strength" value="10" />
</bean>
<bean id="authenticationProviderCrece"
class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
<property name="userDetailsService" ref="userDetailsServicecrece"/>
</bean>
<bean id="authenticationProviderSac"
class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
<property name="userDetailsService" ref="userDetailsServicesac"/>
</bean>
<bean id="authenticationManager"
class="org.springframework.security.authentication.ProviderManager">
<property name="providers">
<list>
<ref local="authenticationProviderCrece"/>
<ref local="authenticationProviderSac"/>
</list>
</property>
</bean>
<security:authentication-manager>
<security:authentication-provider user-service-ref="userDetailsServicecrece"/>
<security:authentication-provider user-service-ref="userDetailsServicesac">
<security:password-encoder ref="encoder"/>
</security:authentication-provider>
</security:authentication-manager>
usuariosDetailsServiceImpl.java
package com.segurosargos.sac.service.impl;
import java.util.ArrayList;
import java.util.Collection;
import javax.annotation.Resource;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import com.segurosargos.sac.modelo.entidad.Usuario;
import com.segurosargos.sac.service.UsuarioService;
@Service("userDetailsServicesac")
public class UsuariosDetailsServiceImpl implements UserDetailsService {
@Resource
private UsuarioService usuarioService;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
System.out.println("Buscando usuario en BD SAC...");
Usuario usuario = usuarioService.findByUsername(username);
if (usuario != null) {
boolean enabled = usuario.isEnabled();
boolean accountNonExpired = usuario.isAccountNonExpired();
boolean credentialsNonExpired = usuario.isCredentialsNonExpired();
boolean accountNonLocked = usuario.isAccountNonLocked();
Collection<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
User user = new User(usuario.getUsername(), usuario.getPassword(),
enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
return user;
}
return null;
}
}
谢谢大家的回复。我只需修改SecurityContext.xml,直接在DaoAuthenticationProvider中更改PasswordEnconder的注入。passwordEncoder是添加类BCryptPasswordEncoder的bean的id。
<bean id="authenticationProviderSac"
class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
<property name="userDetailsService" ref="userDetailsServicesac"/>
<property name="passwordEncoder" ref="passwordEncoder" />
</bean>
<bean id="authenticationManager"
class="org.springframework.security.authentication.ProviderManager">
<property name="providers">
<list>
<ref local="authenticationProviderCrece"/>
<ref local="authenticationProviderSac"/>
</list>
</property>
</bean>
<security:authentication-manager>
<security:authentication-provider user-service-ref="userDetailsServicecrece"/>
<security:authentication-provider user-service-ref="userDetailsServicesac" />
</security:authentication-manager>
问题内容: 我时不时听到“使用bcrypt在PHP中使用密码,bcrypt规则存储密码”的建议。 但是什么呢?PHP不提供任何此类功能,维基百科对文件加密实用程序不屑一顾,而Web搜索仅显示了几种以不同语言实现的Blowfish实现。现在Blowfish也可以通过PHP在PHP中使用,但这对存储密码有何帮助?河豚是一种通用密码,它有两种工作方式。如果可以加密,则可以解密。密码需要单向散列功能。 有
问题内容: 以下问题比最初看起来要复杂。 假设我有一个任意的JSON对象,其中可能包含任意数量的数据,包括其他嵌套的JSON对象。我想要的是JSON数据的加密哈希/摘要,而不考虑实际的JSON格式本身(例如:忽略换行符和JSON令牌之间的间距差异)。 最后一部分是要求,因为JSON将由许多不同平台上的各种(反)序列化器生成/读取。我知道至少有一个Java JSON库,该库在反序列化期间读取数据时会
我记得读过一个方案,其中检查密码的过程是这样的: 给定数据库中的(哈希、盐)值, 用salt哈希密码以检查哈希, 使用旧哈希作为salt的哈希密码, 在数据库中存储(新哈希,也称为旧哈希) 我找不到原始来源无论如何,我不明白 > < li> 使用旧哈希作为salt的优势是什么(与使用随机salt相反), 这种方案的优点是什么(进一步使彩虹表攻击复杂化?),以及 如果有优势,如何使用PHPass应用
问题内容: 我想用散列密码,以后再验证提供的密码是否正确。 散列密码很容易: 如何将纯文本密码与存储的哈希值进行比较? 问题答案: 使用py-bcrypt,您不需要单独存储盐:将盐存储在哈希中。 您可以简单地将哈希用作盐,盐将存储在哈希的开头。
问题内容: 我使用Node.js + passport设置了一个用于用户身份验证的站点。 现在,我需要迁移到Golang,并需要使用保存在db中的用户密码进行身份验证。 Node.js加密代码为: 如何使用Golang制作与Node.js bcrypt相同的哈希字符串? 问题答案: 我相信使用golang.org/x/crypto/bcrypt软件包将是: 工作示例:
我已经对我的注册脚本中的密码进行了加密,它们存储在数据库中,我必须使用它们登录,所以我想使用未加密的密码登录。我已经阅读了这里的一些帖子,但没有任何帮助。我如何才能将其添加到我的登录中。php?盐也存储在数据库中。 这是我的登记簿。用于加密的php脚本 这是我的季节login.php