Я пытаюсь удалить префикс "ROLE_" в Spring Security. Первое, что я попробовал, было:
http.servletApi().rolePrefix("");
Это не сработало, поэтому я попытался создать BeanPostProcessor
как предложено в http://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4 -jc.html # m3to4-role-prefixing-disable. Это тоже не сработало.
Наконец, я попытался создать свой собственный SecurityExpressionHandler
:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.expressionHandler(webExpressionHandler())
.antMatchers("/restricted").fullyAuthenticated()
.antMatchers("/foo").hasRole("mycustomrolename")
.antMatchers("/**").permitAll();
}
private SecurityExpressionHandler<FilterInvocation> webExpressionHandler() {
DefaultWebSecurityExpressionHandler defaultWebSecurityExpressionHandler = new DefaultWebSecurityExpressionHandler();
defaultWebSecurityExpressionHandler.setDefaultRolePrefix("");
return defaultWebSecurityExpressionHandler;
}
Однако это тоже не работает. Если я использую hasAuthority (roleName) вместо hasRole
, он будет работать как положено.
Можно ли удалить префикс ROLE_ из проверки hasRole Spring Security?