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

关于Spring security基于URL的安全性的说明[副本]

张和颂
2023-03-14

我有两个RESTendpoint:

  1. /noauth/rest/sayhi
  2. /rest/auth/getmsg

我想只为/rest/auth/getmsg提供登录,并直接访问/noauth/rest/sayhi

当我在WebSecurityConfigurerAdapter.Configure(HTTPSecurityHTTP)中使用以下模式时

@EnableWebSecurity
@Configuration
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .inMemoryAuthentication()
                .withUser("Java Techie")
                .password("Password")
                .roles("ADMIN");
        auth
            .inMemoryAuthentication()
                .withUser("Basant")
                .password("Password2")
                .roles("USER");
    }

    @Override 
    protected void configure(HttpSecurity http) throws Exception {
       http
           .authorizeRequests()
               .antMatchers("/rest/**").authenticated()
               .anyRequest().permitAll()
               .and()
           .httpBasic();}
    }
}

我只在/rest/auth/getmsg中得到登录提示,而在/noauth/rest/sayhi中没有得到,这是预期的。

但是当我使用下面的模式时,我得到了/rest/auth/getmsg/noauth/rest/sayhi的登录提示,这对我来说是非常意外的。

http
    .authorizeRequests()
        .anyRequest().authenticated()
        .antMatchers("/rest/**").permitAll()
        .and()
    .httpBasic();`

我已经知道我做错了什么,所以我想知道为什么我不能只登录/rest/auth/getmsg和直接访问/noauth/rest/sayhi

更新

@Nully这有一定的意义,但却打破了我对其他情况的理解。假设我使用这个模式:

http
    .authorizeRequests()
        .anyRequest().authenticated()
        .anyRequest().hasRole("ADMIN")
        .and()
    .httpBasic();`

只允许user=“java Techie”登录,因为它是admin并为user=“basant”抛出403 biabled

但当我用

http
    .authorizeRequests()
        .anyRequest().authenticated()
        .antMatchers("/rest/**").hasRole("ADMIN")
        .and()
    .httpBasic();

根据您的解释,它不应该允许user=“basant”访问/rest/auth/getmsg,因为它具有role=“user”。但实际上它允许我在使用user=“basant”时访问/rest/auth/getmsg

共有1个答案

荆修明
2023-03-14

默认情况下,如果没有其他规则,则需要身份验证。您应该添加类似antmatchers(“/noauth/**”).PermitAll()的内容。

 类似资料:
  • 参见文档“10. Web”部分

  • 问题内容: servlet是线程安全的吗?例如,如果我打开5个不同的浏览器并向容器中的一个servlet发送请求,它是否仍然是线程安全的,我特别指的是方法 问题答案: 您的问题可以归结为: 正在从同一对象线程safe上的多个线程调用方法 。答案是: 取决于 。如果您的对象(让它成为servlet)是无状态的或仅具有字段,则这是完全线程安全的。局部变量和参数是线程局部的(驻留在堆栈上,而不是堆上)。

  • QQ群里反馈有这些问题及解决方法 Maven下报配置文件未能找到 -- 提前添加log4j的配置文件到resources文件夹 MyEclipse下修改UTF-8编码无效 -- 在配置里面修改workspace的编码,及tomcat的JVM启动参数(加入-Dfile.encoding=utf-8) Maven项目 在nutz-book-project的源码中, 有pom.xml 推荐的maven

  • 本文向大家介绍说明基于现金的会计。,包括了说明基于现金的会计。的使用技巧和注意事项,需要的朋友参考一下 基于现金的会计手段,它仅记录与现金相关的交易。这意味着收支交易仅在通过现金付款或收款时记录。它是单项会计。 这对于简单的会计系统很有用。 如果要评估库存,则使用它。 当不需要审核时,它很有用。 在服务业务中很有用。 以下是公司偏爱现金会计的原因- 单项记帐。 金融交易很少。 员工很少。 宝贵的有

  • Navicat 提供强大的工具让你管理服务器用户帐号和数据库对象的权限。所有用户和权限的信息都保存于服务器。在主窗口中,点击 “用户”或 “角色”来打开用户或角色的对象列表。

  • Navicat 提供强大的工具让你管理服务器用户帐号和数据库对象的权限。所有用户和权限的信息都保存于服务器。在主窗口中,点击 “用户”来打开用户或角色的对象列表。