将 MD5 的工具类拷贝到项目中 二 微服务模块的搭建 我们将权限的查询放到一个单独的模块中, 这个模块提供接口供给消费者远程调用 (RPC), 这次范例是微服开发的雏形, 在以后你使用 springcloud 的时候会使用到今天的概念 1 使用 maven 创建新的模块 (microboot-sh

Similar documents
"+handlermethod.getbean().getclass().getname()); public void aftercompletion(httpservletrequest req, HttpServletResponse resp, Object handler, Excepti

Microsoft Word - Hibernate与Struts2和Spring组合指导.doc

EJB-Programming-3.PDF

<!-- import outer proper

本章学习目标 小风 Java 实战系列教程 Shiro 核心功能 Shiro 的 Web 集成 Spring 与 Shiro 整合 SpringBoot 整合 Shiro 1. Shiro 核心功能 1.1. RBAC 模型 在 RBAC 的模型, 涉及到三个关键的元素 : 1) 用户 : 系统的使

正文(新).indd

EJB-Programming-4-cn.doc

Flume-ng与Mysql整合开发

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii

在Spring中使用Kafka:Producer篇

1.2. Sql 映射配置 小风 Java 实战系列教程 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//dtd Mapper 3.0//EN" "

基于ECO的UML模型驱动的数据库应用开发1.doc

TWLOM060929

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

2. AOP 底层技术实现 小风 Java 实战系列教程 关键词 : 代理模式 代理模型分为两种 : 1) 接口代理 (JDK 动态代理 ) 2) 子类代理 (Cglib 子类代理 ) 需求 :CustomerService 业务类, 有 save,update 方法, 希望在 save,updat

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

输入 project name 选择完成

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

RunPC2_.doc

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

untitled

使用Cassandra和Spark 2.0实现Rest API服务

高级 Web 技术 SOFT , 2018 春季学期 View on GitHub 高级 Web 技术 Lab 2:Spring Boot 与 MyBatis [TOC] Part 1: Spring Boot 前后端分离的 Web 架构中, 后端一般是一个提供 Restful 接口

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

IoC容器和Dependency Injection模式.doc

<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

Microsoft Word - 朱晔和你聊Spring系列S1E7:简单好用的Spring Boot Actuator.docx

untitled

RUN_PC連載_10_.doc

Microsoft Word - ch04三校.doc

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile..

FileMaker 16 ODBC 和 JDBC 指南

關於本書 l 3 PhoneGap Appcelerator Titanium Sencha Touch (wrapper framework) Native App PhoneGap Build Native App Hybrid App Java Objective-C Android SDK

Chapter 9: Objects and Classes

untitled

Microsoft PowerPoint - ch6 [相容模式]

没 有 多 余 的 Contruol 或 Action 了 原 来 Domain 层 被 服 务 层 Service layer 遮 挡, 在 右 边 图 中, 则 Domain 层 直 接 暴 露 给 前 台 了, 没 有 被 遮 挡, 裸 露 了 这 样 一 步 到 位 实 现 领 域 模 型

FileMaker 15 ODBC 和 JDBC 指南

untitled

untitled

Microsoft Word - 01.DOC

mvc

untitled

1. 2. Flex Adobe 3.

1-1 database columnrow record field 不 DBMS Access Paradox SQL Server Linux MySQL Oracle IBM Informix IBM DB2 Sybase 1-2

在所有的项目开发中, 一定是多人协作的团队开发, 但是使用框架就会出现一个问题, 我们所 有的 Action 以及相关的路径都要求在我们的 struts.xml 文件中配置, 如果所有的人去修改一个 文件, 那么就会变得混乱, 而且有可能出现冲突, 那么在 struts.xml 文件中为了解决这个问

「西醫基層總額支付委員會《第28次委員會議紀錄

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

f2.eps

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

Microsoft Word - Learn Objective-C.doc

威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

untitled

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7.

Microsoft Word - 朱晔和你聊Spring系列S1E5:Spring WebFlux小探.docx

在 ongodb 中实现强事务

JBuilder Weblogic

D getinitparameternames() 9 下 列 选 项 中, 属 于 Servlet API 中 提 供 的 request 对 象 的 包 装 类 的 是 ( ) A HttpServletRequestWrapper B HttpServletRequest C HttpServ

D C 93 2

untitled

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

提问袁小兵:

ebook140-8

Windows 2000 Server for T100

skta00013_read.pdf

拦截器(Interceptor)的学习

了 波 涛 和 号 声 袁 读 者 很 容 易 就 进 入 广 州 城 的 水 上 旅 途 袁 进 入 一 座 野 水 上 名 城 冶 的 传 说 中 去 遥 于 是 袁 一 座 名 城 往 事 充 满 了 漂 流 感 袁 旋 律 自 水 上 而 来 袁 我 们 就 这 样 来 到 了 往 事 的

壹、摘 要

ebook 185-6

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

软件工程文档编制

1.5招募说明书(草案)

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

Go构建日请求千亿微服务最佳实践的副本

无类继承.key

ch08.PDF

RUN_PC連載_12_.doc

untitled

untitled

Chapter #

javaexample-02.pdf

优迈科技教学大纲2009版本

2 Requirements Documentation Doc Name Doc No. 1.0 Version No. Total Page Generated By V6.0.0 Generated Date 2011/10/21 Checked By Checked Date 2011/10

untitled

Microsoft PowerPoint ShengYang Presentation Slides_240609

目 錄 版 次 變 更 記 錄... 2 原 始 程 式 碼 類 型 之 使 用 手 冊... 3 一 安 裝 軟 體 套 件 事 前 準 備... 3 二 編 譯 流 程 說 明

设计模式 Design Patterns

NT 4

untitled

0 配置 Host MIB 设备 V ( 简体版 ) 0 Update: 2016/1/30

epub 61-2

Chapter 9: Objects and Classes

untitled

上海浦~1

Transcription:

Shiro 的环境搭建 一 公共模块的搭建 在实际的开发中, 一个项目可能会分多个模块进行实际的开发, 但是这些模块需要使用一些公 共的操作, 那么这些公共的操作不应该在每个模块中重新定义, 而是将这些公共的操作专门定 义在一个公共的模块之后哦在模块中的 pom 文件里面引入这个公共的模块, 比如说 vo 类就是 一个公共的模块, 所以定义到公共类中 1. 定义公共模块 (microboot-shiro-api)maven 创建 model 项目 2 在 microboot-shiro-api 定义出 vo 类 (com.sun.microboot.vo) package com.sun.microboot.vo; import java.io.serializable; public class Member implements Serializable { private String mid; private String name; private String password; public String getmid() { return mid; public void setmid(string mid) { this.mid = mid; public String getname() { return name; public void setname(string name) { this.name = name; public String getpassword() { return password; public void setpassword(string password) { this.password = password; @Override public String tostring() { return "Member [mid=" + mid + ", name=" + name + ", password=" + password + "]"; 3 定义工具类 (com.sun.microboot.util)

将 MD5 的工具类拷贝到项目中 二 微服务模块的搭建 我们将权限的查询放到一个单独的模块中, 这个模块提供接口供给消费者远程调用 (RPC), 这次范例是微服开发的雏形, 在以后你使用 springcloud 的时候会使用到今天的概念 1 使用 maven 创建新的模块 (microboot-shiro-privider) 2 创建数据层的接口 IMemberDAO package com.sun.microboot.dao; import org.apache.ibatis.annotations.mapper; import com.sun.microboot.vo.member; @Mapper public interface IMemberDAO { public Member findbymid(string mid); IRoleDAO package com.sun.microboot.dao; import java.util.set; import org.apache.ibatis.annotations.mapper; @Mapper public interface IRoleDAO { public Set<String> findallrolebymid(); IActionDAO package com.sun.microboot.dao; import java.util.set; import org.apache.ibatis.annotations.mapper; @Mapper public interface IActionDAO { public Set<String> findallactionbymid(string mid); 3 将 Mybatis 的主配置文件拷贝到 src/main/resource/mybatis 目录下 <?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> </configuration> 4 修改 application.yml 文件 server: port: 8080 # 端口号

spring: # 表示该配置是交给 spring 进行处理 messages: # 处理的内容是资源文件 basename: i18n/messages,i18n/pages # 资源看文件爱你所在的目录和名称 datasource: type: com.alibaba.druid.pool.druiddatasource driver-class-name: com.mysql.jdbc.driver url: jdbc:mysql://localhost:3306/shirodb username: root password: 1234 filters: stat,wall,log4 dbcp2: min-idle: 5 # 指定连接池维持的最少连接数 initial-size: 10 # 初始化连接数 max-total: 100 # 最大连接数 max-wait-millis: 1000 # 最大连接等待时间 redis: host: 192.168.164.129 # 连接的主机地址 port: 6379 # 端口号 password: 1234 # 密码 database: 0 # 选择使用的 redis timeout: 1000 # 超时时间 pool: max-active: 10 # 最大的连接数 max-idle: 8 min-idle: 2 redis-two: # 允许的最大的空闲时间 # 允许最少的空闲数据 host: 192.168.164.129 # 连接的主机地址 port: 6380 # 端口号 password: 1234 # 密码 database: 0 # 选择使用的 redis timeout: 1000 # 超时时间 pool: max-active: 10 # 最大的连接数 max-idle: 8 min-idle: 2 # 允许的最大的空闲时间 # 允许最少的空闲数据 max-wait: 50 # 最大等待时间 mybatis: config-location: classpath:mybatis/mybatis.cfg.xml #mybatis 主配置文件的地址 mapper-locations: classpath:mybatis/mapper/**/*.xml #mybatis 映射文件的位置 type-aliases-package: com.sun.microboot.vo # 实体对象所在的包 5 在 src/main/resource/mybatis/mapper 中定义映射文件 Member.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.sun.microboot.dao.imemberdao"><!-- 在此定义命名空间 --> <select id="findbymid" resulttype="member"> SELECT mid,password,name FROM member where mid=#{mid </select> </mapper> Role.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.sun.microboot.dao.iroledao"><!-- 在此定义命名空间 --> <select id="findallrolebymid" resulttype="string"> SELECT title from role where rid IN( select rid from member_role where mid=#{mid) </select> </mapper> Action.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.sun.microboot.dao.iactiondao"><!-- 在此定义命名空间 --> <select id="findallactionbymid" resulttype="string"> select title from action where actid in( select actid from role_action where rid in( select rid from member_role where mid=#{mid)) </select> </mapper> 6 在 pom 文件中导入相关的开发包 <?xml version="1.0"?> <project xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> <modelversion>4.0.0</modelversion> <parent> <groupid>com.sun</groupid> <artifactid>microboot</artifactid> <version>0.0.1-snapshot</version> </parent> <artifactid>microboot-shiro-provider</artifactid> <name>microboot-shiro-provider</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceencoding>utf-8</project.build.sourceencoding> </properties> <dependencies> <groupid>junit</groupid>

<artifactid>junit</artifactid> <scope>test</scope> <!-- 引进上一个模块 --> <groupid>com.sun</groupid> <artifactid>microboot-shiro-api</artifactid> <version>0.0.1-snapshot</version> <artifactid>spring-boot-starter-web</artifactid> <!-- 测试开发包 --> <artifactid>spring-boot-starter-test</artifactid> <!-- 自动加载开发包 --> <artifactid>spring-boot-devtools</artifactid> <!-- jettyweb 服务器 --> <artifactid>spring-boot-starter-jetty</artifactid> <!-- thymeleaf 用于页面的渲染 --> <artifactid>spring-boot-starter-thymeleaf</artifactid> <!-- 配置 AOP 的开发包 --> <artifactid>spring-boot-starter-aop</artifactid> <!-- mysql 驱动包 --> <groupid>mysql</groupid> <artifactid>mysql-connector-java</artifactid> <!-- Druid 开发包 --> <groupid>com.alibaba</groupid> <artifactid>druid</artifactid> <!-- mybatis 集合开发包 --> <groupid>org.mybatis.spring.boot</groupid> <artifactid>mybatis-spring-boot-starter</artifactid> <!-- 配置日志打印 -->

<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core --> <groupid>ch.qos.logback</groupid> <artifactid>logback-core</artifactid> <!-- redis 开发包 --> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-bootstarter-data-redis --> <artifactid>spring-boot-starter-data-redis</artifactid> </dependencies> </project> 7 开发业务层的接口 package com.sun.microboot.service; import java.util.map; import com.sun.microboot.vo.member; public interface IMemberService { public Member getbymid(string mid); public Map<String,Object> listauthbymid(string mid); 8 使用 Junit 进行测试 package com.sun.microboot.test; import java.util.map; import javax.annotation.resource; 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 com.sun.microboot.providerspringbootstartclass; import com.sun.microboot.service.imemberservice; @SpringBootTest(classes=ProviderSpringBootStartClass.class) @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration public class TestMember { @Resource private IMemberService memberservice; @Test public void testgetbymid() { System.out.println(this.memberservice.getByMid("admin")); @Test public void testlistauthbymid() { Map<String,Object> map = this.memberservice.listauthbymid("admin"); System.out.println(" 角色有 :"+map.get("allroles")); System.out.println(" 权限有 :"+map.get("allactions"));

9 定义控制层该方法的所有的方法支持的请求为 post 请求 package com.sun.microboot.controller; import javax.annotation.resource; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestmethod; import org.springframework.web.bind.annotation.restcontroller; import com.sun.microboot.service.imemberservice; @RestController public class RestMember { @Resource private IMemberService memberservice; @RequestMapping(value="/member/get",method=RequestMethod.GET) public Object getmember(string mid) { return this.memberservice.getbymid(mid); @RequestMapping(value="/member/auth",method=RequestMethod.GET) public Object authmymid(string mid) { return this.memberservice.listauthbymid(mid); 这里的的 get 请求只是为了在浏览器请求演示 10 从浏览器进行访问 http://localhost:8080/member/get?mid=admin

http://localhost:8080/member/auth?mid=admin 11 正常情况下的模块供给远程消费端的调用的, 而不是直接提供给浏览器访问的, 所以要将 所有的方法的请求方式定义为 post, 使用 junit 结合一个 RestTemplate 类模拟一次远程调用 12 进行 RestTemplate 的 bean 注入 package com.sun.microboot.config; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; import org.springframework.web.client.resttemplate; @Configuration public class RestTemplateConfig { @Bean public RestTemplate gettemplate() { return new RestTemplate(); 13 Junit 中进行测试 package com.sun.microboot.test; import java.util.map; import javax.annotation.resource; 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 com.sun.microboot.providerspringbootstartclass; import com.sun.microboot.vo.member; @SpringBootTest(classes=ProviderSpringBootStartClass.class) @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration public class TestMember { @Resource //private IMemberService memberservice; private RestTemplate template; @Test public void testgetbymid() {

//System.out.println(this.memberservice.getByMid("admin")); System.out.println(this.template.postForObject("http://localhost:8080/member/get?mi d=admin", null, Member.class)); @Test public void testlistauthbymid() { Map<String,Object> map =this.template.postforobject("http://localhost:8080/member/auth?mid=admin", null, Map.class); System.out.println(" 角色有 :"+map.get("allroles")); System.out.println(" 权限有 :"+map.get("allactions"));