【问题标题】:Set one method to be not secured Spring Security将一种方法设置为不安全 Spring Security
【发布时间】:2015-09-06 12:41:17
【问题描述】:

我有一个通常是安全的控制器,但我不想保护整个控制器,除了一种方法

@RestController
@RequestMapping(value = "/api/")
@Secured("ROLE_ADMIN")
public class RestApiController {
    @Autowired CategoryService categoryService;
    @Autowired BrandService brandService;

    @RequestMapping(value = "category/{id}")
    public Category category(@PathVariable("id") Integer id){
        return categoryService.getById(id);
    }

    @RequestMapping(value = "brand/{id}")
    public Brand brand(@PathVariable("id") Integer id){
        return brandService.getById(id);
    }

    @RequestMapping(value = "login")
    public String login(){
        return "";
    }
}

我需要将登录设置为可供所有人以及未登录的用户使用,可以吗?

否则我必须在每个方法上都设置它,这会很烦人,这个控制器将实现大约 70 个方法,我只需要每个人都可以访问方法登录。

我在 4.0.0 版本中使用 Spring MVC 和 Spring Security

感谢 Sarfaraz:XML 有效,其他解决方案无效

【问题讨论】:

  • 将登录移动到单独的类中。

标签: java spring spring-mvc spring-security


【解决方案1】:

使用@Secured Spring Annotation,您可以从类中删除@Secured("ROLE_ADMIN") 并将其粘贴到您要保护的方法上。

因此,如果您不想保护,请不要将此注释放在方法上。

【讨论】:

    【解决方案2】:

    一种方法是在 xml 中配置 http 安全性。以下是一个示例

    <security:http auto-config="true" use-expressions="true">
        <security:intercept-url pattern="/" access="hasRole('ROLE_USER')" />
        <security:intercept-url pattern="/api/login" access="permitAll" />
    </security:http>
    

    您可以尝试的另一件事是使用 permitAll 放置安全注释,但我不太确定 xml 配置是否适合我。

     @Secured("permitAll")
     @RequestMapping(value = "login")
        public String login(){
            return "";
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-28
      • 2021-12-15
      • 2011-10-04
      • 2019-09-13
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多