Skip to content

flymi1991/simple-spring-security-framework

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 

Repository files navigation

介绍

这是我自用的一个框架,暂且给它命名为:wyndem-security框架,小小的自恋一下,那么这个框架适用于前后端分离的项目。对于需要跳转页面的需求暂时没有。

特点

  • 动态权限设置
  • 5分钟即可搭建出一个完整的权限控制功能
  • 快速、简单、对数据库表无限制
  • 自定义登录逻辑
  • 对于新手非常友好

依赖

  • Spring Boot
  • Spring security
  • jjwt

Maven

不包含Spring Boot,基本上创建Spring Boot项目的时候就自己生成依赖。 不会的话可用参考这篇:Spring Boot 2.x 入门

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-api</artifactId>
            <version>0.10.5</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-impl</artifactId>
            <version>0.10.5</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-jackson</artifactId>
            <version>0.10.5</version>
            <scope>runtime</scope>
	 </dependency>

快速开始(三步完成)

第一步:实现SecurityUserConfig接口

SecurityUserConfig的接口中需要实现2个方法:

  • getUserRole(String userName) --根据用户来返回该用户是什么角色
  • getRoleUserMappingData() --返回角色对应的可访问的url

Example: MyConfig .java

@Component
public class MyConfig implements SecurityUserConfig {
    @Override
    public String getUserRole(String userName) {
        return "user";
    }

    @Override
    public Map<String, List<String>> getRoleUserMappingData() {
    	
        Map<String,List<String>> map=new HashMap<>();

        List<String> urls=new ArrayList<>();
    	//指hi下的任何路径都可访问
        urls.add("/hi/**");

 		//这里是设置user角色可访问的url
        map.put("user",urls);

        return map;
    }
}


第二步:创建登录的Controller:

关于用户登录,还是自己实现比较放心。

Example: DemoController .java

 	@Parameter(parameters = {"name","pwd"})
    public Object login(String name,String pwd){
        User user = new User();
        if ("wen".equals(name)&&name.equals(pwd)){
            user.setName("wen");
            return user;
        }else{

            return user;
        }

    }


    @GetMapping("/hi")
    public Object example(){
        return "你好,wyndem安全框架";
    }

User.java

  public  class User{
        private String name;
        private  String paw;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getPaw() {
            return paw;
        }

        public void setPaw(String paw) {
            this.paw = paw;
        }
    }

这里的login方法不要写Spring Mvc 上的Mapping映射,在后面会说到如何访问。

关于login方法的限制

  • 参数中必须为String类型
  • 需要把参数的名字写到Parameter注解上,多个这样写:@Parameter(parameters = {"参数1","参数2"}),单个直接写:@Parameter("参数1")
  • 返回的类型可以是Map,或者是对象,但是该对象一定要有个用户名的字段
  • 登录成功,将用户名填充,登录失败,将用户名为Null

第三步:填写配置:

#验证头
cn.wenhaha.jwt.header=Authorization
#jwt的过期时间(单位:秒)
cn.wenhaha.jwt.expiration=100
#登录的url
cn.wenhaha.loginUrl=/login
#处理登录的Controller
cn.wenhaha.longinHandle=com.example.demo.DemoController
#用户名字段
cn.wenhaha.userNameField=name
#处理登录的方法
cn.wenhaha.loginMethodName=login

有些同学可能会有疑问:

  1. 验证头是什么?

在这里插入图片描述 加入请求头部的key

  1. 用户名字段是什么意思?

    就是保存用户名的字段名啦。上面配置中用户名字段为:name,那是因为我User对象中name字段是保存用户名的。如果你在登录方法中返回Map,那么保存用户名的key就是用户名字段

启动类:

@SpringBootApplication
@ComponentScan(basePackages={"com.example.demo","cn.wenhaha.security"})
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

注意:

ComponentScan:需要将cn.wenhaha.security包让Spring Boot 扫描到

效果:

在之前配置中,只有user角色可以访问/hi的url。那么我直接访问看看效果:

没有认证在这里插入图片描述

登录 在这里插入图片描述

然后把登录拿到的Token,在进行一次请求 在这里插入图片描述

就到这里了,有问题可以发送邮件wyndem@qq.com或者用Chat问答都可以联系到我。

About

对spring security 的方法进行一系列封装

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 100.0%