看起来好像没有添加一些过滤器。 我使用Spring安全性3.2.0.RELEASE和java-config。 完整项目发布在GitHub SecurityConfig.java在这里:SecurityConfig.java
我尝试在以下位置设置过滤器:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/app/**").hasRole("ADMIN")
.and()
.formLogin()
.loginPage("/")
.defaultSuccessUrl("/app/")
.failureUrl("/?error=1")
.permitAll()
.and()
.logout()
.logoutSuccessUrl("/?logout");
}
在csrf()。disable()之后 - 但问题没有解决...... 请帮助我解决这个问题,因为我可以使用/ j_spring_security_check和我自己的CustomUserDetailsService!
答案 0 :(得分:4)
我没有使用Spring Security Java Config的经验,但是我检查了你的代码和API,看来设置登录处理URL会让你登录:
AbstractAuthenticationFilterConfigurer.loginProcessingUrl("/j_spring_security_check")
所以你的代码应该是:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/app/**").hasRole("ADMIN")
.and()
.formLogin()
.loginProcessingUrl("/j_spring_security_check")
.loginPage("/")
.defaultSuccessUrl("/app/")
.failureUrl("/?error=1")
.permitAll()
.and()
.logout()
.logoutSuccessUrl("/?logout");
}
我希望这是默认设置。
此外,要使用MyCustomUserDetailsService,而不是像现在一样自动装配它(由Spring创建代理),我会手动配置它:
public class MyCustomUserDetailsService implements UserDetailsService {
private UserDAO userDAO;
public MyCustomUserDetailsService(UserDAO userDAO) {
this.userDAO = userDAO;
}
// ...
}
注意,没有@Service / @组件注释和通过Ctor注入DAO。在安全配置中:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private DataSource dataSource;
@Autowired
private UserDAO userDAO;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication()
.dataSource(dataSource)
.and()
.userDetailsService(new MyCustomUserDetailsService(userDAO));
}
// ...
}
现在我确定,UserDetailService已正确配置。并且肯定会在登录应用程序时使用它。
我还注意到没有使用用户名和密码。这是因为在login.jsp中你使用j_username和j_password,而username参数应该是username,密码参数应该是password。
<input type="text" id="username" class="span4" name="username" placeholder="Username" />
<input type="password" id="password" class="span4" name="password" placeholder="Password" />
查看FormLoginConfigurer类。