Spring Boot 安全登录验证失败
Posted
技术标签:
【中文标题】Spring Boot 安全登录验证失败【英文标题】:Spring boot security login verify failed 【发布时间】:2018-12-10 05:42:33 【问题描述】:我想在用户发送localhost:8080/submit
请求时验证用户的身份,所以我在SecurityConfig类中添加了以下内容:
@Override
protected void configure(HttpSecurity http) throws Exception
http
.authorizeRequests()
.antMatchers("/submit").access("hasRole('WORKER')")
.antMatchers("/**").permitAll()
.and()
.formLogin()
.loginPage("/login")
.and()
.logout()
.logoutSuccessUrl("/")
.and()
.rememberMe()
.tokenValiditySeconds(4838400)
.key("workerKey");
我希望当我在地址字段中输入localhost:8080/submit
时页面可以重定向到localhost:8080/login
。我的 Worker 实体的角色为“WORKER”:
@Override
public Collection<? extends GrantedAuthority> getAuthorities()
return Arrays.asList(new SimpleGrantedAuthority("WORKER"));
当我输入“localhost:8080/submit”时,我可以注册一个帐户并重定向到登录页面。但是当我输入正确的用户名和密码时,它会响应我一个错误页面而不是提交页面:
出现意外错误(类型=禁止,状态=403)。 禁止
我的提交页面只是一个“欢迎”字词页面。我的映射是
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String showLogin()
return "login";
@RequestMapping(value = "/submit", method = RequestMethod.GET)
public String showSubmit()
return "submit";
而且当我再次输入localhost:8080/submit
时,这次并没有重定向到登录页面。相反,它直接重定向到错误页面并显示相同的错误。那么是什么禁止我重定向到提交页面呢?
【问题讨论】:
我不知道你的情况到底有什么问题。但是,如果您想要一个可行的解决方案,当用户点击/submit
时应该进行身份验证,我可以提供一个。
@Dfor 那也很棒!我如何获得它?
【参考方案1】:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter
@Override
protected void configure(HttpSecurity http) throws Exception
http.authorizeRequests().anyRequest().fullyAuthenticated()
.antMatchers("/submit").hasRole("WORKER").and().formLogin().permitAll().and().logout().permitAll();
@Bean
public UserDetailsService userDetailsService()
// ensure the passwords are encoded properly
@SuppressWarnings("deprecation")
UserBuilder users = User.withDefaultPasswordEncoder();
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
manager.createUser(users.username("me").password("me").roles("WORKER").build());
return manager;
您可以使用自定义 login page
进行更多自定义。
【讨论】:
感谢您为我提供替代解决方案。我还为我的代码找到了解决方案。有兴趣的可以看我的回答! 使您的答案有效 “使您的答案有效”是什么意思?我无法理解。 勾选你的答案的有效按钮,让新人知道你的问题的解决方案。 是的,就是这样。我明白了。【参考方案2】:我自己发现了问题。我需要将 Worker 类中的角色“WORKER”更改为“ROLE_WORKER”。像这样
@Override
public Collection<? extends GrantedAuthority> getAuthorities()
return Arrays.asList(new SimpleGrantedAuthority("ROLE_WORKER"));
看来我无法在 Worker 类中将角色“ROLE_WORKER”简化为“WORKER”,但可以在 SecurityConfig 类中简化它。
【讨论】:
查看此 url 以删除 spring 安全角色中的前缀 ***.com/questions/38134121/…以上是关于Spring Boot 安全登录验证失败的主要内容,如果未能解决你的问题,请参考以下文章
REST api 的 Spring 安全性在身份验证失败时显示浏览器弹出窗口
JPQL 的 Spring Boot JPA“查询验证失败”错误
Spring boot Ldap 身份验证失败,LDAP 错误代码 49 - 80090308 数据 52e
Spring Boot 从 1.5.3 升级到 1.5.4,自定义验证配置启动失败
当 Spring Boot 中使用 Hibernate Validator 的 Bean 验证失败时,如何抛出自定义异常?