Spring security开发权限管理系统(一)

从今天起,我将使用SpringBoot+SpringBoot+Mybatis+Vue从到一开发一个系统。
今天将说明Spring Security+SpringBoot+Mybatis的结合

引入POM

    
        
            org.springframework.boot
            spring-boot-starter-security
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.1.2
        
        
            com.alibaba
            druid-spring-boot-starter
            1.1.16
        
        
            org.projectlombok
            lombok
        
        
            mysql
            mysql-connector-java
            runtime
            5.1.47
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        
        
            org.springframework.security
            spring-security-test
            test
        
    

引入用户概念,实现登录功能

在数据库中创建数据库表

DROP TABLE IF EXISTS `system_user`;
CREATE TABLE `system_user` (
  `id` varchar(50) DEFAULT NULL,
  `username` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

SET FOREIGN_KEY_CHECKS = 1;

建立类 值得注意的是我们使用Lombok。在IDEA上需要安装lombok插件

package com.xzz.vdc.model;


import lombok.Data;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.Collection;

@Data
public class User implements UserDetails {
    public  String id;
    public  String username;
    public  String password;

    @Override
    public Collection getAuthorities() {
        return null;
    }

    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @Override
    public boolean isEnabled() {
        return true;
    }
}

值得注意的是,此处引入和继承了Spring Security的关于用户实体类的类,用来实现相应的功能
配置Mybatis并创建Mapper文件






    


创建对应的
Mapper接口

package com.xzz.vdc.mapper;

import com.xzz.vdc.model.User;
import org.springframework.stereotype.Repository;

@Repository
public interface UserMapper {

    public User loadUserByName(String username);
}

项目相关配置

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/vdc?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
server:
  port: 9090
mybatis:
  mapper-locations: classpath:mappers/*Mapper.xml
  type-aliases-package: com.xzz.vdc.model

继承UserDetailService,实现对于用户的查询

ackage com.xzz.vdc.service;

import com.xzz.vdc.mapper.UserMapper;
import com.xzz.vdc.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;

@Service
public class UserService  implements UserDetailsService {

    @Autowired
    UserMapper userMapper;
    @Override
    public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {

        User user = userMapper.loadUserByName(s);
        if (user==null){
            throw new UsernameNotFoundException("用户找不到");
        }else{
            return user;
        }
    }
}

在配置类中进行权限验证

package com.xzz.vdc.config;

import com.xzz.vdc.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.password.NoOpPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
public class SecurityConfig  extends WebSecurityConfigurerAdapter {
    @Autowired
    UserService userService;

    @Bean
    PasswordEncoder passwordEncoder(){
        return   NoOpPasswordEncoder.getInstance();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
            auth.userDetailsService(userService);
    }
}

此处需要注意的是。PasswordEncoder是你所使用的密码的加密方式。。必须与你存入数据的相对应,此处我使用的NoOpPasswordEncoder是不使用加密。还可以使用BCryptPasswordEncoder等加密方式

实现上述之后,我们可以写一个测试类


@RestController
public class HelloController {

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

访问测试类接口。直接转到Spring Security的登录页面。输入用户名和密码即可跳转到显示hello的hello接口页面

你可能感兴趣的:(Mybatis,SpringBoot)