我试图在春季添加网络安全,但我不希望过滤器适用于某些事情。如何在java中完成?
总的来说,我想做的是:
/
和/login
不应显示登录的HTTP基本身份验证提示,而其他所有内容都应通过过滤器并弹出登录提示窗口。
通过我在春天发现的各种例子,我能够想出一个开始,但它显然不起作用:
@Configuration
@EnableWebMvcSecurity
public class AuthSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/css/**", "/js/**", "/img/**", "/lib/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().antMatcher("/").authorizeRequests().anyRequest().permitAll();
http.csrf().disable().antMatcher("/**").authorizeRequests().anyRequest().hasRole("ADMIN").and().httpBasic();
}
@Autowired
protected void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("admin").password("admin123").roles("ADMIN")
.and()
.withUser("user").password("user123").roles("USER");
}
}
答案 0 :(得分:0)
重写您的configure(HttpSecurity http)
方法,如下所示:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.httpBasic()
.and()
.authorizeRequests()
.antMatchers("/", "/login").permitAll()
.anyRequest().hasRole("ADMIN")
.and()
.csrf()
.disable();
}
" /"和" /登录"不应该显示httpbasic身份验证提示 登录,而其他一切应该通过过滤器并弹出一个 登录提示窗口。
如果您认真计划使用HTTP Basic,我想您不需要单独的/login
处理程序,因为基于浏览器的客户端可以使用默认的基于浏览器的弹出窗口,而其他客户端可以发送HTTP Basic请求通过Authorization
标题。