当前位置: 首页 > 知识库问答 >
问题:

带有嵌入式Tomcat的Spring Boot忽略了方法角色

丌官积厚
2023-03-14

我使用带有嵌入式Tomcat和Spring Boot Starter安全性的Spring Boot 1.2.1。此外,我对一些Web服务使用RestController,我希望只有具有特定角色的特定用户才能访问这些Web服务。但是它不起作用,安全性不使用RoleVoter来检查角色。在下面的示例中,用户“user”可以访问Web服务,尽管他没有正确的角色!

首先我的应用程序配置

@Configuration
@EnableJms
@ImportResource( "classpath:net/bull/javamelody/monitoring-spring.xml" )
@EnableAspectJAutoProxy
@ComponentScan
@PropertySource( "classpath:application.properties" )
@EnableAutoConfiguration
@EnableGlobalMethodSecurity( securedEnabled = true )
public class ItemConfiguration { ... }

现在是我的安全配置

@Configuration
@EnableWebSecurity
@Order( SecurityProperties.ACCESS_OVERRIDE_ORDER )
public class SecurityConfig extends WebSecurityConfigurerAdapter {

  @Override
  protected void configure( AuthenticationManagerBuilder auth ) throws Exception {
    auth.inMemoryAuthentication().withUser( "user" ).password( "password" ).roles( "USER" );
  }

  @Override
  protected void configure( HttpSecurity http ) throws Exception {
    http.authorizeRequests().anyRequest().fullyAuthenticated();
    http.httpBasic();
    http.csrf().disable();
  }
}

恢复控制器

@RestController
public class QueryController {

  @Secured( { "ROLE_ADMIN" } )
  @RequestMapping( value = "/", method = { POST }, consumes = { MediaType.APPLICATION_JSON_VALUE },
      produces = MediaType.APPLICATION_JSON_VALUE )
  ResponseEntity< List< BaseEntity > > query( @RequestBody @Valid final ItemQueryRequestData request )
      throws Exception {
      return new ResponseEntity<>( "", HttpStatus.OK );
  }
}

应用性质

spring.data.mongodb.database = item
spring.data.mongodb.host = ${MONGODB_URI:pimpoc01}
spring.data.mongodb.port = ${MONGODB_PORT:27017}

spring.activemq.broker-url=${BROKER_URL:tcp://pimpoc01:61616}
spring.activemq.user=
spring.activemq.password=
spring.activemq.pooled=true

queue.item.in.channelId = item-in
queue.item.in.concurrentConsumers = 1
queue.item.in.destination = item-in

queue.itemOption.in.channelId = itemOption-in
queue.itemOption.in.concurrentConsumers = 1
queue.itemOption.in.destination = itemOption-in

queue.style.in.channelId = style-in
queue.style.in.concurrentConsumers = 1
queue.style.in.destination = style-in

queue.concurrentConsumers = 50
queue.dataCreation.response = dataCreationResponse

queue.structureAttributeValue.in.channelId = structureAttributeValue-in
queue.structureAttributeValue.in.concurrentConsumers = 1
queue.structureAttributeValue.in.destination = structureAttributeValue-in

validation.endpoint = ${VALIDATOR_URI:http://pimpoc01:8080/validator}

感谢任何帮助!

共有2个答案

吕鸿朗
2023-03-14

我遇到了一个类似的问题,通过公开我的控制器方法,即makeQueryController,解决了这个问题。查询方法公共。

陆斌
2023-03-14

从安全配置中删除下面的行。我认为,@Order注释覆盖了基本身份验证。

@Order( SecurityProperties.ACCESS_OVERRIDE_ORDER )
 类似资料:
  • 我有时会在pom中看到以下声明。xml。。。 如您所见,sping-boo-starter-web被声明为tomcat-embed-jasper。 是不是sping-boo-starter-web已经有一个嵌入式tomcat了?为什么一些开发人员仍然声明tomcat-embed-jasper以及boot-starter-web?还是有什么原因?

  • null ServerEndpoint: 谢谢你。

  • 我试图保护我的Spring启动应用程序(1.21)看起来像我的antMatcher("/报告**"). hasRole("报告")的一些URL模式被忽略。 e、 g.如果我浏览到localhost:9000/report/books之类的内容,我需要登录,它只适用于我的用户名密码组合,但我没有将角色报告设置为我的用户“user”。所以我希望我不被允许访问报告网站,但页面会显示出来。 我必须如何更改

  • 我试图让Spring Boot中的嵌入式Tomcat记录到我的Log4J2配置中,但它不起作用。 根据这个与外部Tomcat打交道的答案:https://stackoverflow.com/a/28639068/1845463似乎有必要将一些罐子移到$Catalina_home/libs等。我认为这在Spring Boot中是不可能的,不是吗? 有人设法让log4j2运行,并能够为catalina

  • 我正在尝试使用tomcat设置kerberos/spnego身份验证。我在tomcat目录下添加了一个krb5.conf文件,在SpnegoFilterConfig中读取值并设置java.security.krb5.conf,但是似乎没有考虑到这一点。无论文件是否存在,我都会得到相同的结果。 如果我把jce安全文件放在lib/security中,我会得到 然而,无论我是否拥有krb5.conf,这

  • 问题内容: 我想查找包含字符串的行,如下所示: 但是,这失败了,因为某些元素是NaN: ValueError:无法使用包含NA / NaN值的向量建立索引 所以我诉诸于混乱 有没有更好的办法? 问题答案: 有一个标志: 参见文档: na:默认NaN,填充缺失值的值。 因此,您可以执行以下操作: