早上好,我在登录使用Spring Security的应用程序时遇到了问题。每次我尝试登录时(即使用户名和密码正确),应用程序都会将我重定向到失败url(在我的情况下是:/login?error=true)。密码是用BCrypt加密的,我使用MySQL数据库来存储它们。
应用程序基于Spring in Action 5:https://github.com/habuma/spring-in-action-5-samples/tree/master/ch04/tacos的代码
我的代码:
用户类
@Entity
@Data
@NoArgsConstructor
@Table(name = "Users")
public class User implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
private String email;
public User(String username, String password, String email) {
this.username = username;
this.password = password;
this.email = email;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return null;
}
@Override
public boolean isAccountNonExpired() {
return false;
}
@Override
public boolean isAccountNonLocked() {
return false;
}
@Override
public boolean isCredentialsNonExpired() {
return false;
}
@Override
public boolean isEnabled() {
return false;
}
}
安全配置
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Qualifier("userService")
@Autowired
private UserDetailsService userDetailsService;
@Bean
public PasswordEncoder encoder() {
return new BCryptPasswordEncoder();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception{
auth.userDetailsService(userDetailsService)
.passwordEncoder(encoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception{
http.authorizeRequests()
.antMatchers("/calendar")
.hasRole("USER")
.antMatchers("/","/**").permitAll()
.and()
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/calendar")
.failureUrl("/login?error=true")
.and()
.logout()
.logoutSuccessUrl("/");
}
}
用户服务
@Service
public class UserService implements UserDetailsService {
private UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository){
this.userRepository = userRepository;
}
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userRepository.findByUsername(username);
if(user != null){
return user;
}
throw new UsernameNotFoundException("Username not found: "+username);
}
}
控制器
@Controller
@RequestMapping("/register")
public class UserController {
private UserRepository userRepository;
private PasswordEncoder passwordEncoder;
@Autowired
public UserController(UserRepository userRepository, PasswordEncoder passwordEncoder){
this.userRepository = userRepository;
this.passwordEncoder = passwordEncoder;
}
@ModelAttribute
public void calendar(Model model){
model.addAttribute("user", new User());
}
@GetMapping
public String register(){
return "register";
}
@PostMapping
public String addUser(@ModelAttribute User user){
User newUser = new User(user.getUsername(),passwordEncoder.encode(user.getPassword()),user.getEmail());
userRepository.save(newUser);
return "redirect:/login";
}
}
登录表格(Thymeleaf)
<form th:method="POST" th:action="@{/login}">
<div class="formInputs">
<label for="username">Username</label>
<input id="username" name="username" type="text">
</div>
<div class="formInputs">
<label for="password">Password</label>
<input id="password" name="password" type="password">
</div>
<div style="clear: both"></div>
<input type="submit" value="Log in">
</form>
登记表
<form method="POST" th:action="@{/register}" th:object="${user}">
<div class="formInputs">
<label for="username">Username</label>
<input id="username" type="text" th:field="*{username}">
</div>
<div class="formInputs">
<label for="password">Password</label>
<input id="password" type="password" th:field="*{password}">
</div>
<div class="formInputs">
<label for="email">Email</label>
<input id="email" type="email" th:field="*{email}">
</div>
<div style="clear: both"></div>
<input type="submit" value="Register">
<input type="reset" value="Reset">
</form>
如果有人能帮我找到解决方案,我将不胜感激,提前谢谢。
确保您的用户返回启用=true
,以及isAccount tNonExpired=true
(以及所有其他人,如isAccount tNonLocked)。还返回一个空的权限列表
,而不是null。
否则,Spring Security会将您的用户视为已禁用/锁定/无论什么,并且不允许您登录。
我正在为Dynamics GP编写加载项,并尝试运行自定义存储过程,但当我尝试打开连接时,我收到一条错误消息,显示“用户登录失败:”。 如果手动使用系统管理员用户名和密码,则所有操作都会正确执行。但是,我想使用登录Dynamics GP的人的用户名和密码。 这是完整堆栈跟踪: 如果我将中的更改为使用,它看起来根本找不到网络上的数据源并给出错误: 如果我将连接字符串打印到屏幕上,它看起来是正确的,正
我已经安装了Jenkins ver。OSX 10.11.3上的1.653,使用标准安装程序并添加git插件。我试着从github为公共项目创建一个作业,它成功了。现在,我试图创建私人回购作业使用用户名和密码,但它总是失败。这是日志: 在工作区中构建/Users/Shared/Jenkins/Home/workspace/MyProject git rev-parse --is-inside-wor
本文向大家介绍php+MySQL实现登录时验证登录名和密码是否正确,包括了php+MySQL实现登录时验证登录名和密码是否正确的使用技巧和注意事项,需要的朋友参考一下 直入主题,先看php校验登录名和密码是否正确的代码: 效果图: 以上就是本文的全部内容,希望对大家学习php程序设计有所帮助。
我喜欢用户按公司名称、用户名和密码登录-他们需要输入所有这些字段。 和字段在表中。在表中。 可以在表中重复,但是每个用户名属于不同的公司名。在表中定义。 如何根据公司名称、用户名和密码进行身份验证? 我查看了方法。 我不能覆盖它,因为我需要传递属于公司的特定用户,然后进行身份验证检查。 更新:
问题内容: 我需要输入USER表的USER_ID字段作为另一个表中的外键。因此,我认为我需要在用户登录时启动一个会话。我很难让它在任何地方回显。我能够启动一个会话,该会话允许我回显USERNAME,但无法将其复制为ID。 请帮忙吗?我的处理代码如下。我还粘贴了本节,我暂时尝试对其进行回显以进行测试。 处理脚本: 我希望USER_ID出现在哪里: 问题答案: 使用FETCH_ASSOC而不是FETC
首次登陆的用户名和密码有二个,分别为: 用户名:admin 密码 :admin 用户名:user0 密码:user0 账号admin是系统管理员权限,账号user0是普通用户,属于设计角色,拥有设计权限。 在登录后,注意更改账号密码。