具有 Spring 安全性的用户模拟
User Impersonation with Spring Security
我正在尝试使用 Spring 安全及其 SwitchUserFilter 实现用户模拟。
当前配置如下:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/impersonate*").hasRole("Administrator");
http.addFilter(switchUserFilter());
super.configure(http);
setLoginView(http, ViewLogin.class);
}
...
@Bean
public SwitchUserFilter switchUserFilter(){
SwitchUserFilter filter = new SwitchUserFilter();
filter.setUserDetailsService(userDetailsService);
filter.setSwitchUserUrl("/impersonate");
filter.setSwitchFailureUrl("/switchUser");
filter.setTargetUrl("/");
return filter;
}
我试图使用以下方式导航到模拟:
UI.getCurrent().getPage().setLocation("/impersonate?username="+username);
不幸的是,Vaadin 正在尝试导航到页面“/impersonate...”,但没有找到相应的页面并跳过了 SwitchUserFilter。
我将如何强制切换?
如果您使用 setSwitchUserUrl
,它将仅匹配 POST
个请求 [1]。
但是您想使用 GET
请求。所以你必须使用像这样的匹配器
这个:
filter.setSwitchUserMatcher(new AntPathRequestMatcher("/impersonate", "GET"));
顺便说一句:您不必 addFilter
过滤器,如果您将其定义为
@Bean
.
我正在尝试使用 Spring 安全及其 SwitchUserFilter 实现用户模拟。
当前配置如下:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/impersonate*").hasRole("Administrator");
http.addFilter(switchUserFilter());
super.configure(http);
setLoginView(http, ViewLogin.class);
}
...
@Bean
public SwitchUserFilter switchUserFilter(){
SwitchUserFilter filter = new SwitchUserFilter();
filter.setUserDetailsService(userDetailsService);
filter.setSwitchUserUrl("/impersonate");
filter.setSwitchFailureUrl("/switchUser");
filter.setTargetUrl("/");
return filter;
}
我试图使用以下方式导航到模拟:
UI.getCurrent().getPage().setLocation("/impersonate?username="+username);
不幸的是,Vaadin 正在尝试导航到页面“/impersonate...”,但没有找到相应的页面并跳过了 SwitchUserFilter。 我将如何强制切换?
如果您使用 setSwitchUserUrl
,它将仅匹配 POST
个请求 [1]。
但是您想使用 GET
请求。所以你必须使用像这样的匹配器
这个:
filter.setSwitchUserMatcher(new AntPathRequestMatcher("/impersonate", "GET"));
顺便说一句:您不必 addFilter
过滤器,如果您将其定义为
@Bean
.