Spring MVC集成Spring Security后自定义登录无法按角色跳转问题求助
Spring Security登录失败问题排查
以下是所有导致登录异常的问题,按优先级排序修复即可:
1. 前端表单问题
- 表单缺失基础属性:
<form>标签没有配置action="/login"和method="post",无法向你配置的登录处理地址提交POST请求 - 输入框无
name属性:Spring Security通过参数名获取账号密码,你需要给用户名输入框加name="username"、密码输入框加name="password",否则提交时后端拿不到参数 - 多余字段:你表单里的role字段完全不需要,用户角色是后端根据用户名查询出来的,不是前端提交的,这个字段提交了也不会生效
- ID重复:用户名输入框和密码输入框的ID都是
exampleInputPassword1,属于前端语法错误 - 缺少CSRF令牌:你当前开启了CSRF防护,表单没有携带CSRF参数,提交请求会被直接拦截返回403,要么在表单里加入CSRF隐藏域,要么测试阶段先关闭CSRF
2. SecurityConfig配置问题
- 权限规则冲突:你先配置了
/untitled_war/hi/**路径放行,后面又配置了同路径需要Anonimo/USER角色,后面的规则会覆盖前面的,而你创建的所有用户都没有这两个角色,直接触发权限不足 - 登录页路径配置错误:你Controller对应的登录页地址是
/hi/untitled_war/login/form,但你配置的loginPage是/untitled_war/hi/untitled_war/login,路径完全不匹配,Spring Security找不到自定义登录页 - 账号参数名拼写错误:你配置的
usernameParameter("userame")少写了一个n,正确应为usernameParameter("username"),导致后端拿不到用户名参数 - 路径匹配规则错误:
ADMIN_Matcher数组里的client/delite/**、cliente/view/**前面漏了斜杠,而且存在拼写错误:delite应为delete,cliente应为client - 重复配置Logout:连续两次配置
logout().logoutUrl("/login/form^logout")属于重复配置,会触发异常,且地址里的^应为? - 未配置登录成功跳转地址:没有配置
defaultSuccessUrl,登录成功后Spring Security会默认跳转到之前访问的被拦截页,如果用户直接访问登录页提交,就没有默认跳转目标
3. 控制器问题
你控制器类上的@RequestMapping("hi/untitled_war/login/form")和SecurityConfig里配置的登录页、失败跳转地址都不匹配,需要统一路径。
内容的提问来源于stack exchange,提问作者helloJava
相关产品推荐
相关产品推荐

