springboot整合shiro定义用户认证授权微服务

2025-10-11 21:38:41

1、所谓的用户微服务指的是要求在“microboot-shiro-member-provider”里面进肤悦行实现,改服务之中需要考虑如下的几点:

1、该服务需要进行数据库的开发,所以一定要进行数据库连接池的配置。

2、既然要进行微服务的编写,那么就一定需要提供有业务接口以及DAO实现子类,现在的实现将依靠Mybatis完成。

3、所有的微服务最终要通过控制器的Rest进行发布处理。

【microboot-shiro-member-provider】配置druid数据库连接池;

需要修改pom.xml配置文件,吩罩侧为项目的整合添加相关的支持包;

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <parent>

        <artifactId>SpringBoot</artifactId>

        <groupId>com.gwolf</groupId>

        <version>1.0-SNAPSHOT</version>

    </parent>

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.gwolf</groupId>

    <artifactId>microboot-shiro-member-provider</artifactId>

    <packaging>jar</packaging>

    <name>microboot-member-provider</name>

    <url>http://maven.apache.org</url>

    <properties>

        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    </properties>

    <dependencies>

        <dependency>

            <groupId>com.gwolf</groupId>

            <artifactId>microboot-shiro-api</artifactId>

            <version>1.0-SNAPSHOT</version>

        </dependency>

        

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-test</artifactId>

            <scope>test</scope>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>springloaded</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-devtools</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-thymeleaf</artifactId>

        </dependency>

        <dependency>

            <怕珠groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-aop</artifactId>

        </dependency>

        <dependency>

            <groupId>mysql</groupId>

            <artifactId>mysql-connector-java</artifactId>

            <version>5.0.4</version>

        </dependency>

        <dependency>

            <groupId>com.alibaba</groupId>

            <artifactId>druid</artifactId>

            <version>1.1.0</version>

        </dependency>

        <dependency>

            <groupId>org.mybatis.spring.boot</groupId>

            <artifactId>mybatis-spring-boot-starter</artifactId>

            <version>1.3.0</version>

        </dependency>

        

        <dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

            <scope>test</scope>

        </dependency>

    </dependencies>

</project>

springboot整合shiro定义用户认证授权微服务

2、【microboot-shiro-member-provider】建立几个DAO接口:

提供用户认证的DAO接口:IMemberDAO;

package com.gwolf.dao;

import com.gwolf.vo.Member;

import org.apache.ibatis.annotations.Mapper;

@Mapper

public interface IMemberDAO {

    public Member findById(String mid);

}

3、提供角色检测的IRoleDAO接口:

package com.gwolf.dao;

import org.apache.ibatis.annotations.Mapper;

import java.util.Set;

@Mapper

public interface IRoleDAO {

    public Set<String> findAllRoleByMember(String mid);

}

springboot整合shiro定义用户认证授权微服务

4、提供所有权限检测的IActionDAO接口:

package com.gwolf.dao;

import org.apache.ibatis.annotations.Mapper;

import java.util.Set;

@Mapper

public interface IActionDAO {

    public Set<String> findAllActionByMember(String mid);

}

springboot整合shiro定义用户认证授权微服务

5、【microboot-shiro-member-provider】将mybatis的配置文件拷贝到项目的"src/main/resources"下:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration   

    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"   

    "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration> 

        <!-- 进行Mybatis的相应的环境的属性定义 -->

        <settings>      

                <!-- 在本项目之中开启二级缓存 -->

                <setting name="cacheEnabled" value="true"/>

        </settings>

</configuration>

springboot整合shiro定义用户认证授权微服务

6、配置mybatis/mapper/com/gwolf/MemberMapper.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 

        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.gwolf.dao.IMemberDAO">

  <!-- 根据身份信息取得密码进行认证 -->

  <select id="findById" parameterType="String" resultType="Member">

        select mid,password,name from member where mid=#{mid}

  </select>

</mapper>

springboot整合shiro定义用户认证授权微服务

7、配置mybatis/mapper/com/gwolf/RoleMapper.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.gwolf.dao.IRoleDAO">

    <select id="findAllRoleByMember" parameterType="String" resultType="String">

        select flag from role where rid in

        (select rid from member_role where mid=#{mid})

    </select>

</mapper>

springboot整合shiro定义用户认证授权微服务

8、配置mybatis/mapper/com/gwolf/ActionMapper.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.gwolf.dao.IActionDAO">

    <select id="findAllActionByMember" parameterType="String" resultType="String">

        select flag from action where actid in

        (select actid from role_action where rid

        in(select rid from member_role where mid=#{mid}))

    </select>

</mapper>

springboot整合shiro定义用户认证授权微服务

9、【microboot-shiro-member-provider】修改application.yml配置文件:

server:

  port: 8080

spring:

  messages:

    basename: i18n/Message,i18n/Pages #资源文件的名称

  datasource:

    #配置当前要使用的数据源的操作类型

    type: com.alibaba.druid.pool.DruidDataSource

    driver-class-name: org.gjt.mm.mysql.Driver

    url: jdbc:mysql://localhost:3306/shirodb

    username: root

    password: root

    filters:  stat,wall,log4j

    dbcp2:

      min-idle: 5

      initial-size: 5

      max-total: 5

      max-wait-millis: 200

mybatis:

  config-location: classpath:mybatis/mybatis.cfg.xml

  type-aliases-package: com.gwolf.vo

  mapper-locations: 

  - classpath:mybatis/mapper/**/*.xml

springboot整合shiro定义用户认证授权微服务

10、【microboot-shiro-member-provider】定义IMemberService业务接口:

package com.gwolf.service.impl;

import com.gwolf.dao.IActionDAO;

import com.gwolf.dao.IMemberDAO;

import com.gwolf.dao.IRoleDAO;

import com.gwolf.service.IMemberService;

import com.gwolf.vo.Member;

import org.springframework.stereotype.Service;

import javax.annotation.Resource;

import java.util.HashMap;

import java.util.Map;

import java.util.Set;

@Service

public class MemberServiceImpl implements IMemberService{

    @Resource

    private IMemberDAO memberDAO;

    

    @Resource

    private IRoleDAO roleDAO;

    

    @Resource

    private IActionDAO actionDAO;

    

    

    @Override

    public Member get(String mid) throws Exception {

        return this.memberDAO.findById(mid);

    }

    @Override

    public Map<String, Set<String>> listAuthByMember(String mid) throws Exception {

        Map<String,Set<String>> map = new HashMap<String,Set<String>>();

        map.put("allRoles", this.roleDAO.findAllRoleByMember(mid));

        map.put("allActions", this.actionDAO.findAllActionByMember(mid));

        return map;

    }

}

springboot整合shiro定义用户认证授权微服务

11、【microboot-shiro-member-provider】编写业务层功能测试代码类:

package com.gwolf.test;

import com.gwolf.StartSpringBootMain;

import com.gwolf.service.IDeptService;

import com.gwolf.service.IMemberService;

import com.gwolf.vo.Dept;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import org.springframework.test.context.web.WebAppConfiguration;

import javax.annotation.Resource;

@SpringBootTest(classes = StartSpringBootMain.class)

@RunWith(SpringJUnit4ClassRunner.class)

@WebAppConfiguration

public class TestMemberService {

    @Resource

    private IMemberService memberService;

    

    @Test

    public void testGet() throws Exception{

        System.out.print(memberService.get("admin"));

    }

    @Test

    public void testAuth() throws Exception{

        System.out.print(memberService.listAuthByMember("admin"));

    }

}

springboot整合shiro定义用户认证授权微服务

12、【microboot-shiro-member-provider】进行控制层编写,控制层现在给出的一定是Rest服务:

package com.gwolf.controller;

import com.gwolf.service.IMemberService;

import com.gwolf.util.controller.AbstractBaseController;

import com.gwolf.vo.Member;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.stereotype.Service;

import org.springframework.validation.BindingResult;

import org.springframework.validation.ObjectError;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.ResponseBody;

import javax.validation.Valid;

import java.util.Iterator;

@Controller

public class MemberController extends AbstractBaseController{

    @Autowired

    private IMemberService memberService;

    @RequestMapping(value="/member/get", method = RequestMethod.POST)

    @ResponseBody

    public Object get(String mid) {

        try {

            return this.memberService.get(mid);

        } catch (Exception e) {

            e.printStackTrace();

        }

        return null;

    }

    @RequestMapping(value="/member/auth", method = RequestMethod.POST)

    @ResponseBody

    public Object auth(String mid) {

        try {

            return this.memberService.listAuthByMember(mid);

        } catch (Exception e) {

            e.printStackTrace();

        }

        return null;

    }

}

springboot整合shiro定义用户认证授权微服务

13、【microboot-shiro-member-provider】编写控制层测试,如果要访问Rest服务肯定要使用RestTemplate完成,这个类为了简单使用,直接进行对象实例化处理。

package com.gwolf.test;

import com.gwolf.StartMemberSpringBootMain;

import com.gwolf.vo.Member;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import org.springframework.test.context.web.WebAppConfiguration;

import org.springframework.web.client.RestTemplate;

import java.util.HashSet;

import java.util.List;

import java.util.Map;

import java.util.Set;

@SpringBootTest(classes = StartMemberSpringBootMain.class)

@RunWith(SpringJUnit4ClassRunner.class)

@WebAppConfiguration

public class TestMemberController {

    private RestTemplate restTemplate = new RestTemplate();

    @Test

    public void testGet() throws Exception{

        Member member = restTemplate.postForObject("http://localhost:8080/member/get?mid=admin",

                null, Member.class);

        

        System.out.println(member);

    }

    @Test

    public void testAuth() throws Exception{

        Map<String,Object> map = restTemplate.postForObject("http://localhost:8080/member/auth?mid=admin",

                null, Map.class);

        Set<String> allRoles = new HashSet<String>();

        allRoles.addAll((List<String>)map.get("allRoles"));

        

        System.out.println(map);

    }

}

springboot整合shiro定义用户认证授权微服务

14、那么此时一个专门进行用户认证以及授权检测的微服务实现开发完成了。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢