微人事第十天:Spring Security方法安全

在Spring Security中之前通过在配置类中针对不同的访问路径有不同的权限,现在可以直接在方法上通过注解来配置访问不同的路径所需要的权限。

首先在配置中添加方法安全注解
Spring Security默认是禁用注解的,要想开启注解, 需要在继承WebSecurityConfigurerAdapter的类上加@EnableGlobalMethodSecurity注解, 来判断用户对某个控制层的方法是否具有访问权限 。

prePostEnabled:执行方法的前后进行安全验证
securedEnabled:创建一个切点,这样的话Spring Security切面就会包装带有@Secured注解的方法

@EnableGlobalMethodSecurity(prePostEnabled = true,securedEnabled = true)

业务类
@PreAuthorize(“hasRole(‘admin’)”):执行该方法需要有admin权限
@Secured(“ROLE_user”):执行该方法需要user权限
@PreAuthorize(“hasAnyRole(‘admin’,‘user’)”):需要admin或者user权限

package org.javaboy.security.service;

import org.springframework.security.access.annotation.Secured;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Service;

@Service
public class MethodService {

    @PreAuthorize("hasRole('admin')")
    public String admin() {
        return "hello admin";
    }

    @Secured("ROLE_user")
    public String user() {
        return "hello user";
    }

    @PreAuthorize("hasAnyRole('admin','user')")
    public String hello() {
        return "hello hello";
    }
}

接口:
针对service的三个方法提供三个不同的接口

package org.javaboy.security.controller;

import org.javaboy.security.service.MethodService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController  {

    @GetMapping("/hello")
    public String hello() {
        return "hello security";
    }

    @GetMapping("/admin/hello")
    public String admin() {
        return "hello admin!";
    }

    @GetMapping("/user/hello")
    public String user() {
        return "hello user!";
    }

    @GetMapping("/login")
    public String login() {
        return "please login!";
    }

    @Autowired
    private MethodService methodService;

    @GetMapping("/hello1")
    public String hello1() {
        return methodService.admin();
    }

    @GetMapping("/hello2")
    public String hello2() {
        return methodService.user();
    }

    @GetMapping("/hello3")
    public String hello3() {
        return methodService.hello();
    }
}

分别用两个用户测试这三个接口:
首先登陆javaboy用户
在这里插入图片描述
分别对三个接口测试:
hello需要的权限是admin,javaboy用户具有admin权限所以可以访问
在这里插入图片描述
测试第二个接口hello2
由于hello2需要权限user,而javaboy用户不具备,所以不能访问
在这里插入图片描述
第三个接口hello3
hello3接口admin和user权限都可以访问,javaboy用户有admin权限所以可以访问。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值