- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已按照以下说明为管理员和用户创建两个不同的 http 安全 block 。 docs.spring.io/spring-security-multiple-httpsecurity
如文档所述,如果 URL 不以/aaa 开头,则将使用另一个配置进行模式。
但是当我将@Order(1)放在管理 block 时,管理页面工作正常,用户页面不会重定向到登录页面/login/user
当我将@Order(1)放在用户 block 时,用户页面工作正常,管理页面也不会重定向到登录页面/login/admin。
这是我的java代码
@EnableWebSecurity
public class MultiHttpSecurityConfig {
/**
* intercept user url
*/
@Configuration
@Order(1)
public static class UserWebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
CustomAuthenticationSuccessHandler successHandler;
@Autowired
CustomAuthenticationFailureHandler failureHandler;
@Autowired
private CustomAuthenticationProvider customAuthProvider;
@Autowired
private CustomUserDetailsService userDetailsService;
@Value("${my.cookie.timeout}")
private int cookieTimeOut;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests()
.antMatchers("/css/**", "/js/**", "/images/**, /fonts/**").permitAll()
.antMatchers("/bbb/**","/aaaa/**").hasAnyRole("USER");
http.formLogin()
.successHandler(successHandler)
.failureHandler(failureHandler)
.loginPage("/login/user").permitAll();
http.logout().permitAll();
http.rememberMe().key("uniqueAndSecret").tokenValiditySeconds(cookieTimeOut);
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(customAuthProvider);
auth.userDetailsService(userDetailsService);
}
}
/**
* intercept admin url
*/
@Configuration
public static class AdminWebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
CustomAuthenticationSuccessHandler successHandler;
@Autowired
CustomAuthenticationFailureHandler failureHandler;
@Value("${my.cookie.timeout}")
private int cookieTimeOut;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests()
.antMatchers("/css/**", "/js/**", "/images/**, /fonts/**").permitAll()
.antMatchers("/ccc/**","/dddd").hasAnyRole("ADMIN");
http.formLogin()
.successHandler(successHandler)
.failureHandler(failureHandler)
.loginPage("/login/admin").permitAll();
http.logout().permitAll();
http.rememberMe().key("uniqueAndSecret").tokenValiditySeconds(cookieTimeOut);
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("test").password("test").roles("ADMIN");
}
}
}
如下 dur 所说,关键原因是 authorizeRequests() 方法匹配了 Order(1) 中的所有 url,所以我需要添加 antMatcher("/bbb/*>")** 首先在authorizeRequests()之前。
但是antMatcher()只匹配一种url,如果我还有一种url要匹配,比如“/bbb/”,“/aaa/*”,如何实现这 ?那么我需要再添加一项 WebSecurityConfigurerAdapter 配置吗?有没有更好的方法来减少代码?
我在 spring-security SDK requestMatchers() 方法中找到了解决方案,它在 requestMatchers() 方法上方提供了一个示例。
下面是我的代码,用于在 Order(1) 上匹配用户的网址
http.csrf().disable();
http.requestMatchers()
.antMatchers("/bbb/**", "/aaa/**")
.and()
.authorizeRequests()
.antMatchers("/**").hasAnyRole("USER");
http.formLogin()
.successHandler(successHandler)
.failureHandler(failureHandler)
.loginPage("/login/user").permitAll();
http.logout().permitAll();
那么bbb和aaa都已经匹配成功了,不需要再创建配置了
但是出现了另一个问题,当用户将用户名和密码发布到登录/用户界面时,它会显示“405方法不允许”登录页面,而管理页面工作正常
我搜索过google,它告诉我要禁用csrf,但我已经禁用了csrf...
最佳答案
在我的一个项目中,我没有使用表单登录,而是实现了自定义 AccessDeniedHandler 和 AuthenticationEntryPoint,它们可以使用我需要的一些自定义逻辑重定向到不同的登录页面。然而,loginPage()最终也是一个AuthenticationEntryPoint。
可以通过以下方式添加它们:
.exceptionHandling().authenticationEntryPoint(new YourCustomAuthEntryHandler()).and()
.exceptionHandling().accessDeniedHandler(new YourCustomAccessDeniedHandler())
这只是一个想法,也许值得检查一下。
此外,我认为您需要验证所有请求,请在authorizeRequests() block 中为这两个配置添加此行:
.anyRequest().authenticated()
关于java - Spring security - 指定顺序时多个 httpsecurity 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57743635/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!