spring 安全总是返回 anonymousUser
spring security always returning anonymousUser
我有一个 spring 现有的基于 spring 的应用程序的安全实现,无论我在登录页面提供什么,它总是 returns 匿名用户。
@Configuration
@EnableWebSecurity
@EnableGlobalAuthentication
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("bill").password("abc123").roles("ROLE_USER");
auth.inMemoryAuthentication().withUser("admin").password("root123").roles("ADMIN");
auth.inMemoryAuthentication().withUser("dba").password("root123").roles("ADMIN","DBA");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
System.out.println("configure called");
http.authorizeRequests()
.antMatchers("/*").access("hasRole('ROLE_USER')")
//.antMatchers("/*").access("IS_AUTHENTICATED")
.and().formLogin().loginPage("/login")
.usernameParameter("user").passwordParameter("passWord")
.and().csrf()
.and().exceptionHandling().accessDeniedPage("/Access_Denied");
}
}
来自 login.jsp 的表格:
<form action="/Patching/Authen" name="form1" method="POST" onsubmit="return validateForm();"><br><br>
<h1>User Login</h1>
<table>
<tr>
<th>Username</th>
<td><input type="text" name="username" id="user" required/></td>
</tr>
<tr>
<th>Password</th>
<td><input type="password" name="password" required/></td>
</tr>
</table><br><input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
<input type="submit"><br><br><br>
</form>
当我在我的控制器上做时 post 表单提交 :
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
返回匿名认证。
P.S。我已经有一个 login.jsp,其中我有配置的用户和密码参数。
帮助表示赞赏。
您的配置没有提及任何经过身份验证的 uri 模式。
您需要添加
anyRequest().authenticated()
我尝试了您上面的任何建议...对我有用的是将 login.jsp 上的表单操作更改为 "login" 并将配置修改为
http.authorizeRequests()
.antMatchers("/", "/home").access("hasRole('USER')")
.antMatchers("/resources/**").permitAll()
//.antMatchers("/*").access("IS_AUTHENTICATED")
.anyRequest().authenticated()
.and().csrf().disable().formLogin().loginPage("/login").permitAll()
//.loginProcessingUrl("/Authen")
.usernameParameter("user").passwordParameter("passWord")
.defaultSuccessUrl("/Authen")
.failureUrl("/failedLogin")
.and().exceptionHandling().accessDeniedPage("/Access_Denied");
此外,我需要处理现有实施流程以及 spring 安全性。
我有一个 spring 现有的基于 spring 的应用程序的安全实现,无论我在登录页面提供什么,它总是 returns 匿名用户。
@Configuration
@EnableWebSecurity
@EnableGlobalAuthentication
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("bill").password("abc123").roles("ROLE_USER");
auth.inMemoryAuthentication().withUser("admin").password("root123").roles("ADMIN");
auth.inMemoryAuthentication().withUser("dba").password("root123").roles("ADMIN","DBA");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
System.out.println("configure called");
http.authorizeRequests()
.antMatchers("/*").access("hasRole('ROLE_USER')")
//.antMatchers("/*").access("IS_AUTHENTICATED")
.and().formLogin().loginPage("/login")
.usernameParameter("user").passwordParameter("passWord")
.and().csrf()
.and().exceptionHandling().accessDeniedPage("/Access_Denied");
}
}
来自 login.jsp 的表格:
<form action="/Patching/Authen" name="form1" method="POST" onsubmit="return validateForm();"><br><br>
<h1>User Login</h1>
<table>
<tr>
<th>Username</th>
<td><input type="text" name="username" id="user" required/></td>
</tr>
<tr>
<th>Password</th>
<td><input type="password" name="password" required/></td>
</tr>
</table><br><input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
<input type="submit"><br><br><br>
</form>
当我在我的控制器上做时 post 表单提交 :
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
返回匿名认证。
P.S。我已经有一个 login.jsp,其中我有配置的用户和密码参数。 帮助表示赞赏。
您的配置没有提及任何经过身份验证的 uri 模式。
您需要添加
anyRequest().authenticated()
我尝试了您上面的任何建议...对我有用的是将 login.jsp 上的表单操作更改为 "login" 并将配置修改为
http.authorizeRequests()
.antMatchers("/", "/home").access("hasRole('USER')")
.antMatchers("/resources/**").permitAll()
//.antMatchers("/*").access("IS_AUTHENTICATED")
.anyRequest().authenticated()
.and().csrf().disable().formLogin().loginPage("/login").permitAll()
//.loginProcessingUrl("/Authen")
.usernameParameter("user").passwordParameter("passWord")
.defaultSuccessUrl("/Authen")
.failureUrl("/failedLogin")
.and().exceptionHandling().accessDeniedPage("/Access_Denied");
此外,我需要处理现有实施流程以及 spring 安全性。