gpt4 book ai didi

java - 在 SPring Boot 2.1.1 中扩展 GlobalMethodSecurityConfiguration 时出现错误,指出已定义 "methodSecurityInterceptor"

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:06:59 28 4
gpt4 key购买 nike

我正在覆盖 GlobalMethodSecurityConfiguration 类,但只有一个方法:protected MethodSecurityExpressionHandler createExpressionHandler()

当我尝试运行应用程序时,我得到:

Description:

The bean 'methodSecurityInterceptor', defined in class path resource [org/springframework/security/config/annotation/method/configuration/GlobalMethodSecurityConfiguration.class], could not be registered. A bean with that name has already been defined in class path resource [com/testing/config/MyMethodSecurityConfig.class] and overriding is disabled.

Action:

Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

配置类

当我没有覆盖该基本方法时,为什么要这样做?我如何重写 MethodSecurityExpressionHandler 而不会出现此错误?

import com.testing.AadMethodSecurityExpressionHandler;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.access.expression.method.MethodSecurityExpressionHandler;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration;

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class MyMethodSecurityConfig extends GlobalMethodSecurityConfiguration
{
@Override
protected MethodSecurityExpressionHandler createExpressionHandler()
{
return new MyMethodSecurityExpressionHandler();
}
}

表达式处理程序

import org.aopalliance.intercept.MethodInvocation;
import org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler;
import org.springframework.security.access.expression.method.MethodSecurityExpressionOperations;
import org.springframework.security.core.Authentication;

public class MyMethodSecurityExpressionHandler extends DefaultMethodSecurityExpressionHandler
{
@Override
protected MethodSecurityExpressionOperations createSecurityExpressionRoot(Authentication authentication, MethodInvocation invocation)
{
MyMethodSecurityExpressionRoot root = new MyMethodSecurityExpressionRoot( authentication );
root.setPermissionEvaluator( getPermissionEvaluator() );
root.setTrustResolver( getTrustResolver() );
root.setRoleHierarchy( getRoleHierarchy() );

return root;
}
}

表达式根

import org.springframework.security.access.expression.SecurityExpressionRoot;
import org.springframework.security.access.expression.method.MethodSecurityExpressionOperations;
import org.springframework.security.core.Authentication;

public class MyMethodSecurityExpressionRoot extends SecurityExpressionRoot implements MethodSecurityExpressionOperations
{
private Object filterObject;
private Object returnObject;
private Object target;

public MyMethodSecurityExpressionRoot(Authentication a)
{
super( a );
}

@Override
public void setDefaultRolePrefix(String defaultRolePrefix)
{
//Simple test to see if this works
super.setDefaultRolePrefix( "" );
}

public void setFilterObject(Object filterObject)
{
this.filterObject = filterObject;
}

public Object getFilterObject()
{
return filterObject;
}

public void setReturnObject(Object returnObject)
{
this.returnObject = returnObject;
}

public Object getReturnObject()
{
return returnObject;
}

void setThis(Object target)
{
this.target = target;
}

public Object getThis()
{
return target;
}
}

最佳答案

对于为我遇到此问题的任何人,解决方案是删除我在已设置的 WebSecurityConfigurer 上配置的重复@EnableGlobalMethodSecurity 注释。

关于java - 在 SPring Boot 2.1.1 中扩展 GlobalMethodSecurityConfiguration 时出现错误,指出已定义 "methodSecurityInterceptor",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53640372/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com