Guns基于SpringBoot 2,致力于做更简洁的后台管理系统,完美整合springmvc + shiro + mybatis-plus + beetl!Guns项目代码简洁,注释丰富,上手容易,同时Guns包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块),可以直接作为一个后台管理系统的脚手架!

Overview



Guns基于Spring Boot2,致力于做更简洁的后台管理系统。包含系统管理,代码生成,多数据库适配,SSO单点登录,工作流,短信,邮件发送,OAuth2登录,任务调度,持续集成,docker部署等功。支持Spring Cloud Alibaba微服务。社区活跃,版本迭代快,加群免费技术支持。

Guns官方交流群:254550081(满) 684163663(满) 207434260(满)(三个群已满,扫下方二维码加官方微信群)

bootstrap bootstrap + spring-boot mybatis-plus beetl


在线demo

最新免费教程

https://www.bilibili.com/video/av56718207

配套课件:https://gitee.com/stylefeng/Guns-Guide

扫码关注官方公众号和官方微信群

官方公众号 扫码邀请入群

最新6.0更新内容如下(更新日期2019.10.25)

  1. 前端框架升级easyweb 3.1.5,layui升级2.5.5。
  2. 优化整体前端UI界面,更加简洁,大气。
  3. 抽象出一套权限模型,利用接口进行权限控制和调用规则,方便在权限控制方面进行拓展。
  4. 替换掉了以往的ShiroKit,采用LoginContextHolder.getContext().getUser()获取当前登录用户。
  5. 权限框架替换为spring security + jwt,采用令牌登录方式,更加灵活可拓展,同时方便对接多系统SSO。
  6. 新增常量容器模型,对系统变量,常量,以及用户自定义的一些参数进行在线维护,在线刷新参数值,无需重启。
  7. 系统的验证码开关,顶部导航栏开关,系统默认密码等在常量容器进行维护,极大方便了系统使用。
  8. 所有页面加载的css和js进行版本控制,当升级项目时,更新对应版本号,可控制浏览器对缓存js和css的刷新。
  9. 增加用户的职务管理,可对用户进行职务绑定。

Guns版本说明

版本名称 说明 地址
Guns v6.0 最新开源版本,采用layui https://gitee.com/stylefeng/guns
Guns v5.1 Guns经典版的最新版,采用bootstrap 3 https://gitee.com/stylefeng/guns/tree/v5.1-final

Guns 企业版

版权声明

Guns采用LGPL-3.0开源协议

Guns前端模板

  • Guns最新旗舰版,所用前端模板为EasyWeb后台开发框架,官网地址为:https://easyweb.vip/,使用时已征求作者允许。

管理系统功能

1.用户管理 2.角色管理 3.部门管理 4.菜单管理 5.字典管理 6.业务日志 7.登录日志 8.监控管理 9.通知管理 10.职务管理 11.代码生成 12.在线参数配置

项目特点

  1. 基于SpringBoot,简化了大量项目配置和maven依赖,让您更专注于业务开发,独特的分包方式,代码多而不乱。
  2. 完善的日志记录体系,可记录登录日志,业务操作日志(可记录操作前和操作后的数据),异常日志到数据库,通过@BussinessLog注解和LogObjectHolder.me().set()方法,业务操作日志可具体记录哪个用户,执行了哪些业务,修改了哪些数据,并且日志记录为异步执行,详情请见@BussinessLog注解和LogObjectHolder,LogManager,LogAop类。
  3. 利用beetl模板引擎对前台页面进行封装和拆分,使臃肿的html代码变得简洁,更加易维护。
  4. 对常用js插件进行二次封装,使js代码变得简洁,更加易维护。
  5. controller层采用map + warpper方式的返回结果,返回给前端更为灵活的数据,具体参见com.stylefeng.guns.modular.system.warpper包中具体类。
  6. 防止XSS攻击,通过XssFilter类对所有的输入的非法字符串进行过滤以及替换。
  7. 简单可用的代码生成体系,通过SimpleTemplateEngine可生成带有主页跳转和增删改查的通用控制器、html页面以及相关的js,还可以生成Service和Dao,并且这些生成项都为可选的,通过ContextConfig下的一些列xxxSwitch开关,可灵活控制生成模板代码,让您把时间放在真正的业务上。
  8. 控制器层统一的异常拦截机制,利用@ControllerAdvice统一对异常拦截,具体见com.stylefeng.guns.core.aop.GlobalExceptionHandler类。
  9. 页面统一的js key-value单例模式写法,每个页面生成一个唯一的全局变量,提高js的利用效率,并且有效防止多个人员开发引起的函数名/类名冲突,并且可以更好地去维护代码。
  10. 在线系统参数配置,灵活控制常用功能的开关,无需重启项目即可生效,实时刷新。

业务日志记录

日志记录采用aop(LogAop类)方式对所有包含@BussinessLog注解的方法进行aop切入,会记录下当前用户执行了哪些操作(即@BussinessLog value属性的内容),如果涉及到数据修改,会取当前http请求的所有requestParameters与LogObjectHolder类中缓存的Object对象的所有字段作比较(所以在编辑之前的获取详情接口中需要缓存被修改对象之前的字段信息),日志内容会异步存入数据库中(通过ScheduledThreadPoolExecutor类)。

beetl对前台页面的拆分与包装

例如,把主页拆分成三部分,每个部分单独一个页面,更加便于维护

<!--左侧导航开始-->
    @include("/common/_tab.html"){}
<!--左侧导航结束-->

<!--右侧部分开始-->
    @include("/common/_right.html"){}
<!--右侧部分结束-->

<!--右侧边栏开始-->
    @include("/common/_theme.html"){}
<!--右侧边栏结束-->

以及对重复的html进行包装,使前端页面更加专注于业务实现,例如,把所有页面引用包进行提取

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="renderer" content="webkit" /><!-- 让360浏览器默认选择webkit内核 -->

<!-- 全局css -->
<link rel="shortcut icon" href="${ctxPath}/static/favicon.ico">
<!-- 全局js -->
<script src="${ctxPath}/static/js/jquery.min.js?v=2.1.4"></script>
<body class="gray-bg">
	<div class="wrapper wrapper-content">
		${layoutContent}
	</div>
	<script src="${ctxPath}/static/js/content.js?v=1.0.0"></script>
</body>
</html>

开发页面时,只需编写如下代码即可

@layout("/common/_container.html"){
<div class="row">
    <div class="col-sm-12">
        <div class="ibox float-e-margins">
            <div class="ibox-title">
                <h5>部门管理</h5>
            </div>
            <div class="ibox-content">
               //自定义内容
            </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/static/modular/system/dept/dept.js"></script>
@}

以上beetl的用法请参考beetl说明文档。

对js常用代码的封装

在webapp/static/js/common目录中,有对常用js代码的封装,例如Feng.js,其中Feng.info(),Feng.success(),Feng.error()三个方法,分别封装了普通提示,成功提示,错误提示的代码,简化了layer提示层插件的使用。

极简的图片上传方法

guns对web-upload进行二次封装,让图片的上传功能呢只用2行代码即可实现,如下

var avatarUp = new $WebUpload("avatar");
avatarUp.init();

具体实现请参考static/js/common/web-upload-object.js

独创controller层,map+warpper返回方式

map+warpper方式即为把controller层的返回结果使用BeanKit工具类把原有bean转化为Map的的形式(或者原有bean直接是map的形式),再用单独写的一个包装类再包装一次这个map,使里面的参数更加具体,更加有含义,下面举一个例子,例如,在返回给前台一个性别时,数据库查出来1是男2是女,假如直接返回给前台,那么前台显示的时候还需要增加一次判断,并且前后端分离开发时又增加了一次交流和文档的成本,但是采用warpper包装的形式,可以直接把返回结果包装一下,例如动态增加一个字段sexName直接返回给前台性别的中文名称即可。

独创mybatis数据范围拦截器,实现对数据权限的过滤

Guns的数据范围控制是指,对拥有相同角色的用户,根据部门的不同进行相应的数据筛选,如果部门不相同,那么有可能展示出的具体数据是不一致的.所以说Guns对数据范围控制是以部门id为单位来标识的,如何增加数据范围拦截呢?只需在相关的mapper接口的参数中增加一个DataScope对象即可,DataScope中有两个字段,scopeName用来标识sql语句中部门id的字段名称,例如deptiid或者id,另一个字段deptIds就是具体需要过滤的部门id的集合.拦截器原理如下:拦截mapper中包含DataScope对象的方法,获取其原始sql,并做一个包装限制部门id在deptIds范围内的数据进行展示.

swagger api管理使用说明

swagger会管理所有包含@ApiOperation注解的控制器方法,同时,可利用@ApiImplicitParams注解标记接口中的参数,具体用法请参考CodeController类中的用法。

 @ApiOperation("业务测试接口")
 @ApiImplicitParams({
         @ApiImplicitParam(name = "moduleName", value = "模块名称", required = true, dataType = "String"),
         @ApiImplicitParam(name = "bizChName", value = "业务名称", required = true, dataType = "String"),
         @ApiImplicitParam(name = "bizEnName", value = "业务英文名称", required = true, dataType = "String"),
         @ApiImplicitParam(name = "path", value = "项目生成类路径", required = true, dataType = "String")
 })
 @RequestMapping(value = "/generate", method = RequestMethod.POST)

jwt token鉴权机制

jwt token鉴权机制是指若需要请求服务器接口,必须通过AuthController获取一个请求令牌(jwt token),持有jwt token的用户才可以访问服务器的其他资源,如果没有此令牌,则访问接口会直接忽略,请求获取jwt token时,需要携带credenceName和credenceCode(可以是账号密码,可以是手机号验证码等等),校验credenceName和credenceCode成功后,会颁发给客户端一个jwt token还有一个随机字符串,用于传输过程中对数据进行签名用,签名机制请见下面介绍.基于token的鉴权机制类似于http协议也是无状态的,它不需要在服务端去保留用户的认证信息或者会话信息.这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利.

签名机制

签名机制是指客户端向服务端传输数据中,对传输数据进行md5加密,并且加密过程中利用Auth接口返回的随机字符串进行混淆加密,并把md5值同时附带给服务端,服务端通获取数据之后对数据再进行一次md5加密,若加密结果和客户端传来的数据一致,则认定客户端请求的数据是没有被篡改的,若不一致,则认为被加密的数据是被篡改的

Guns经典版效果图

stylefeng开源技术

官网:https://www.stylefeng.cn/

Comments
  • Bump mysql-connector-java from 8.0.11 to 8.0.16

    Bump mysql-connector-java from 8.0.11 to 8.0.16

    Bumps mysql-connector-java from 8.0.11 to 8.0.16.

    Changelog

    Sourced from mysql-connector-java's changelog.

    Changelog

    https://dev.mysql.com/doc/relnotes/connector-j/8.0/en/

    Version 8.0.20

    • Fix for Bug#30805426, IN CASE OF ISAUTHMETHODSWITCHREQUESTPACKET , TOSERVERS > 1 ARE IGNORED.

    • Fix for Bug#97714 (30570249), Contribution: Expose elapsed time for query interceptor to avoid hacky thread local implementations. Thanks to Matti Sillanpää and Johnathan Crawford for their contribution.

    • Fix for Bug#97724 (30570721), Contribution: Allow '3.' formatted numbers. Thanks to Nick Pollett for his contribution.

    • Fix for Bug#98536 (30877755), SIMPLEDATEFORMAT COULD CACHE A WRONG CALENDAR.

    • Fix for Bug#91112 (28125069), AGAIN WRONG JAVA.SQL.DATE.

    • Fix for Bug#30474158, CONNECTOR/J 8 DOES NOT HONOR THE REQUESTED RESULTSETTYPE SCROLL_INSENSITIVE ETC.

    • Fix for Bug#98445 (30832513), Connection option clientInfoProvider=ClientInfoProviderSP causes NPE.

    • WL#12248, DevAPI: Connection compression.

    • Fix for Bug#30636056, ResultSetUtil.resultSetToMap() can be unsafe to use.

    • Fix for Bug#97757 (30584907), NULLPOINTEREXCEPTION WITH CACHERESULTSETMETADATA=TRUE AND EXECUTEQUERY OF "SET".

    Version 8.0.19

    • WL#13346, Support for mult-host and failover.

    • Fix for Bug#97413 (30477722), DATABASEMETADATA IS BROKEN AFTER SERVER WL#13528.

    • WL#13367, DNS SRV support.

    • WL#12736, DevAPI: Specify TLS ciphers to be used by a client or session.

    • Fix for regression tests broken by Bug#97079 fix.

    • Fix for Bug#96383 (30119545) RS.GETTIMESTAMP() HAS DIFFERENT RESULTS FOR TIME FIELDS WITH USECURSORFETCH=TRUE.

    • Fix for Bug#96059 (29999318), ERROR STREAMING MULTI RESULTSETS WITH MYSQL-CONNECTOR-JAVA 8.0.X.

    • Fix for Bug#96442 (30151808), INCORRECT DATE ERROR WHEN CALLING GETMETADATA ON PREPARED STATEMENT.

    Version 8.0.18

    • WL#13347, Connectors should handle expired password sandbox without SET operations.

    • Fix for Bug#84098 (25223123), endless loop in LoadBalancedAutoCommitInterceptor.

    Commits
    • 34cbc6b License book updated.
    • 793bd55 Minor fix for tests failing with URL without parameters.
    • 58600cc WL#12825, Remove third-party libraries from sources and bundles.
    • 5aa15d5 Fix for Bug#93590 (29054329), javax.net.ssl.SSLException: closing inbound bef...
    • 1fecc2b Fix for Bug#94414 (29384853), Connector/J RPM package have version number in ...
    • f5d24e3 Fix for Bug#27786499, REDUNDANT FILES IN DEBIAN PACKAGE FOR DEBIAN9(COMMUNITY...
    • c49db58 WL#12246, DevAPI: Prepared statement support.
    • a5c3d29 Added definition file for msi building tools.
    • 13045c2 WL#10839, Adjust c/J tests to the new "ON" default for
    • 2e350a5 Fix for Bug#29329326, PLEASE AVOID SHOW PROCESSLIST IF POSSIBLE.
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • 操作日志没有显示日志时间

    操作日志没有显示日志时间

    接口没有返回操作日志时间,前台查看空白 SysLog实体没有建立操作日志时间属性 @TableId( value = "log_id", type = IdType.ASSIGN_ID ) private Long logId; @TableField("log_name") private String logName; @TableField("log_content") private String logContent; @TableField("app_name") private String appName; @TableField("request_url") private String requestUrl; @TableField("request_params") private String requestParams; @TableField("request_result") private String requestResult; @TableField("server_ip") private String serverIp; @TableField("client_ip") private String clientIp; @TableField("user_id") private Long userId; @TableField("http_method") private String httpMethod; @TableField("client_browser") private String clientBrowser; @TableField("client_os") private String clientOs;

    opened by LyuXiaobu 0
  • RoleMapper::roleTreeListByRoleId没必要地复杂

    RoleMapper::roleTreeListByRoleId没必要地复杂

    描述

    原查询

    SELECT 
      r.role_id as id, 
      pid as "pId", 
      name AS "name", 
      (
        CASE WHEN (
          pid = 0 
          OR pid IS NULL
        ) THEN 'true' ELSE 'false' END
      ) as "open", 
      (
        CASE WHEN (
          r1.role_id = 0 
          OR r1.role_id IS NULL
        ) THEN 'false' ELSE 'true' END
      ) as "checked" 
    FROM 
      sys_role r 
      LEFT JOIN (
        SELECT 
          role_id 
        FROM 
          sys_role 
        WHERE 
          role_id IN ( #{params} )
      ) r1 ON r.role_id = r1.role_id 
    ORDER BY 
      pid, 
      sort ASC;
    

    等价于

    SELECT 
      r.role_id as id, 
      pid as "pId", 
      name AS "name", 
      (
        CASE WHEN (
          pid = 0 
          OR pid IS NULL
        ) THEN 'true' ELSE 'false' END
      ) AS "open", 
      (
        CASE WHEN ( r.role_id = 0 OR
          r.role_id IN ( #{params} )
        ) THEN 'false' ELSE 'true' END
      ) AS "checked" 
    FROM 
      sys_role r 
    ORDER BY 
      pid, 
      sort ASC;
    

    可能的修改方法

    见#93

    opened by wtune 0
  • 将父级对象全部保存在一个列里,使得SQL查询很慢

    将父级对象全部保存在一个列里,使得SQL查询很慢

    描述

    • Dict.parentIds
    • Dept.pids
    • Menu.pcodes

    这些property存放某个对象的所有祖先对象。查询时通过类似parent_ids LIKE CONCAT('%$[', #{dictId}, '$]%') ESCAPE '$'的方式去查询。这样的条件因为前缀有'%',所以没法利用索引,而是全表扫描,在表比较大的时候会变得比较慢。

    可能的修改方法

    用单独的表来维护对象的关系。例如对于Dict可以

    CREATE TABLE `dict_hierarchy` (
      child_id BIGINT(20),
      parent_id BIGINT(20),
      CONSTRAINT child_ref FOREIGN KEY (child_id) REFERENCES sys_dict(menu_id),
      CONSTRAINT parent_ref FOREIGN KEY (parent_id) REFERENCES sys_dict(menu_id),
      CONSTRAINT hierarchy_pk PRIMARY KEY (child_id, parent_id),
      KEY `parent_id_key` (parent_id)
    )
    

    然后每组关系对应表中一个行,比如4的祖先有1, 2, 3,则在dict_hierarchy中有<4,1>,<4,2>,<4,3>三行。原来的查询则变成

    SELECT ...
    FROM dict_hierarchy h
    LEFT JOIN sys_dict d ON h.child_id = d.menu_id
    WHERE h.parent_id = ? AND ...
    

    h.parent_id = ?可以利用索引,性能将会提高不少。

    opened by wtune 0
  • fix(sec): upgrade mysql:mysql-connector-java to 8.0.28

    fix(sec): upgrade mysql:mysql-connector-java to 8.0.28

    What happened?

    There are 1 security vulnerabilities found in mysql:mysql-connector-java 8.0.21

    What did I do?

    Upgrade mysql:mysql-connector-java from 8.0.21 to 8.0.28 for vulnerability fix

    What did you expect to happen?

    Ideally, no insecure libs should be used.

    How was this patch tested?

    Run mvn compile succeeded locally. Run mvn clean test succeeded locally. all tests passed.

    The specification of the pull request

    PR Specification from OSCS

    opened by eurrio 0
  • Bump mysql-connector-java from 8.0.21 to 8.0.28

    Bump mysql-connector-java from 8.0.21 to 8.0.28

    Bumps mysql-connector-java from 8.0.21 to 8.0.28.

    Changelog

    Sourced from mysql-connector-java's changelog.

    Changelog

    https://dev.mysql.com/doc/relnotes/connector-j/8.0/en/

    Version 8.0.29

    • Fix for Bug#21978230, COMMENT PARSING NOT PROPER IN PREPSTMT.EXECUTEBATCH().

    • Fix for Bug#81468 (23312764), MySQL server fails to rewrite batch insert when column name contains word select.

    • Fix for Bug#106435 (33850099), 8.0.28 Connector/J has regressive in setAutoCommit after Bug#104067 (33054827).

    • Fix for Bug#106240 (33781440), StringIndexOutOfBoundsException when VALUE is at the end of the query.

    • Fix for Bug#106397 (33893591), Contribution: fix: fix LocalizedErrorMessages.properties doc: less then -> ... Thanks to Jianjian Song for his contribution.

    • Fix for Bug#77924 (25710160), JDBC SOCKS SHOULD NOT PERFORM LOCAL DNS RESOLUTION.

    • Fix for Bug#82084 (23743938), YEAR DATA TYPE RETURNS INCORRECT VALUE FOR JDBC GETCOLUMNTYPE().

    • Fix for Bug#106441 (33850155), Add charset mapping for utf8mb3.

    • WL#15048, Upgrade Protocol Buffers dependency to protobuf-java-3.19.4.

    • Fix for Bug#106065 (33726184) Contribution: BigDecimal.toPlainString no need to check decimal exponent. Thanks to Baoyi Chen for his contribution.

    • Fix for Bug#106171 (33757217), Contribution: Remove unnecessary boxing in ResultSetImpl. Thanks to Ningpp Ning for his contribution.

    • Fix for Bug#25701740, STMT EXECUTION FAILS FOR REPLICATION CONNECTION WHEN USECURSORFETCH=TRUE.

    • Fix for Bug#33723611, getDefaultTransactionIsolation must return repeatable read.

    • Fix for Bug#38954 (11749415), DATA TRUNCATION WHILE USING BIT(1) IN STORED PROCEDURE WITH INOUT TYPE.

    • Fix for Bug#85317 (25672958), EXECUTE BATCH WILL THROW NULL POINTER EXCEPTION WHERE THE COLUMN IS BLOB!

    • Fix for Bug#105915 (33678490), Connector/J 8 server prepared statement precision loss in execute batch.

    • Fix for Bug#104349 (33563548), com.mysql.cj NPE.

    • Fix for Bug#62006 (16714956), JAVA.IO.NOTSERIALIZABLEEXCEPTION: JAVA.IO.STRINGREADER WHEN PROFILESQL=TRUE.

    • WL#14750, Better unification of query bindings.

    • WL#14834, Support for FIDO authentication.

    • WL#14835, Align TLS option checking across connectors.

    ... (truncated)

    Commits
    • 7ff2161 Updating copyright years
    • b13af38 Fix for DateTimeTest according to changes in MySQL server.
    • 5c7b775 Update in test for Bug#96900 (30355150).
    • e1169ee Fix for Bug#99260 (31189960), statement.setQueryTimeout,creates a database co...
    • 05778ef Fix for Bug#103324 (32770013), X DevAPI Collection.replaceOne() missing match...
    • 48219f2 Fix for Bug#105197 (33461744), Statement.executeQuery() may return non-naviga...
    • 24cf7e2 Fix for Bug#105323 (33507321), README.md contains broken links.
    • ad46620 Fix for Bug#96900 (30355150), STATEMENT.CANCEL()CREATE A DATABASE
    • 4d19ea1 Fix for Bug#104067 (33054827), No reset autoCommit after unknown issue occurs.
    • bc45d35 Fix for Bug#85223 (25656020), MYSQLSQLXML SETSTRING CRASH.
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • admin用户在资源查看里点详情报错

    admin用户在资源查看里点详情报错

    接口返回

    {"exceptionClazz":null,"exceptionTip":null,"exceptionPlace":null,"success":false,"code":"B0317","message":"无法访问未经授权的接口,未授权url为:/resource/getDetail","data":null}
    

    控制台报错

    2022-03-25 18:10:44.840 ERROR 146510 --- [nio-8080-exec-9] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is ServiceException(errorCode=B0317, userTip=无法访问未经授权的接口,未授权url为:/resource/getDetail, moduleName=kernel-d-auth, data=null)] with root cause
    
    cn.stylefeng.roses.kernel.auth.api.exception.AuthException: 无法访问未经授权的接口,未授权url为:/resource/getDetail
    	at cn.stylefeng.guns.core.security.base.BaseSecurityInterceptor.preHandle(BaseSecurityInterceptor.java:82)
    	at org.springframework.web.servlet.HandlerExecutionChain.applyPreHandle(HandlerExecutionChain.java:148)
    	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1055)
    	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)
    	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
    
    opened by ieayoio 0
  •  被代理方法参数含有primitive类型时,会抛出 java.lang.NoSuchMethodException

    被代理方法参数含有primitive类型时,会抛出 java.lang.NoSuchMethodException

    image

    如果被代理方法的参数有 primitive 类型,比如 int,args[k].getClass() 取出来是 java.lang.Integer ,之后执行 Method method = Class.forName(classType).getMethod(methodName, classes); 就会抛出 java.lang.NoSuchMethodException

    这里正确的取被代理方法参数类型的方式应该是:

    ((MethodInvocationProceedingJoinPoint.MethodSignatureImpl) ((MethodInvocationProceedingJoinPoint) joinPoint).signature).getParameterTypes()
    
    opened by light0x00 0
Owner
冯硕楠
冯硕楠
【多模块微服务脚手架平台——Ancba】前后端分离架构SpringBoot 2.x、SpringCloud、SpringAdmin、Spring Security、Mybatis-plus、(Shiro)、JWT、Feign、Nacos、Knif4j等。

Ancba 打造Blog.Core项目的SpringBoot微服务版,但是更强大 ?? Ancba (Another New CLI By Alacrity) 另一个全新的敏捷脚手架(单体/模块化/微服务都可支持)。 核心知识点与进度 ?? 在 ..../resources/application-

ansonzhang 35 Nov 29, 2022
springboot 框架与其它组件结合如 jpa、mybatis、websocket、security、shiro、cache等

致歉 由于自己懒以及身体对issuse 解决的不及时。请大家以后提issuse 的时候写清楚 模块名 比如“springboot-SpringSecurity4” 和问题,我会抽时间抓紧解决。 springboot-SpringSecurity0 包含两部分代码: 第一是 博客 springboot

abel 5.9k Jan 5, 2023
参考 DDD/Clean Architecture 设计理念,整合 Spring Boot/Spring Security/Mybatis Plus/Vavr 的 Spring Realworld 应用案例

Demo · 更多项目 · 参考资料 ms-spring-ddd-examples Unified Domain-driven Layered Architecture for MicroService Apps,试图探索一套切实可行的应用架构规范,可以复制、可以理解、可以落地、可以控制复杂性的指导

王下邀月熊 19 Sep 23, 2022
以教学为目的的电商系统。包含ToB复杂业务、互联网高并发业务、缓存应用;DDD、微服务指导。模型驱动、数据驱动。了解大型服务进化路线,编码技巧、学习Linux,性能调优。Docker/k8s助力、监控、日志收集、中间件学习。前端技术、后端实践等。主要技术:SpringBoot+JPA+Mybatis-plus+Antd+Vue3。

简介 bcMall 是一个以教学为目的的电商系统。bcMall将为你展现一个典型的系统演进过程,所使用的主流技术完全开放。 它包含ToB复杂业务、互联网高并发业务、缓存应用;DDD、微服务指导。模型驱动、数据驱动。了解大型服务进化路线,编码技巧、学习Linux,性能调优。Docker/k8s助力、监

xjjdog 411 Jan 3, 2023
基于RuoYi-Vue集成 Lombok+Mybatis-Plus+Undertow+knife4j+Hutool+Feign 重写所有原生业务 定期与RuoYi-Vue同步

平台简介 RuoYi-Vue-Plus 是基于 RuoYi-Vue 针对 分布式集群 场景升级 定期与 RuoYi-Vue 同步 集成 Lock4j dynamic-datasource 等分布式场景解决方案 集成 Mybatis-Plus Lombok Hutool 等便捷开发工具 适配重写相关业

CrazyLionLi 110 Jan 4, 2023
SpringBoot SpringSecurity Jpa mybatis-plus websocket Redis camunda Vue3 Vite ant-design VbenAdmin vxe-table bpmn.js

SpringBoot SpringSecurity Jpa mybatis-plus websocket Redis camunda Vue3 Vite ant-design VbenAdmin vxe-table bpmn.js

zsvg 16 Dec 13, 2022
A web application to generate Java source code with spring-boot and mybatis-plus

A web application to generate Java source code with spring-boot and mybatis-plus. Also, The class of Domain,Mapper,XML of Mapper Interface,Service,Controller are included. You can change the data source what you want to generate for your project in app running without restart this code -generator application.

Weasley 3 Aug 29, 2022
循序渐进,学习Spring Boot、Spring Boot & Shiro、Spring Batch、Spring Cloud、Spring Cloud Alibaba、Spring Security & Spring Security OAuth2,博客Spring系列源码:https://mrbird.cc

Spring 系列教程 该仓库为个人博客https://mrbird.cc中Spring系列源码,包含Spring Boot、Spring Boot & Shiro、Spring Cloud,Spring Boot & Spring Security & Spring Security OAuth2

mrbird 24.8k Jan 6, 2023
提供一套基于Spring Boot-Shiro-Vue的权限管理思路.前后端都加以控制,做到按钮/接口级别的权限

Spring Boot-Shiro-Vue 提供一套基于SpringBoot-shiro-vue的权限管理思路. 前后端都加以控制,做到按钮/接口级别的权限 DEMO 测试地址 admin/123456 管理员身份登录,可以新增用户,角色. 角色可以分配权限 控制菜单是否显示,新增/删除按钮是否显示

null 4.2k Jan 5, 2023
shiro-cve-2020-17523 漏洞的两种绕过姿势分析(带漏洞环境)

Apache Shiro 两种姿势绕过认证分析(CVE-2020-17523) 0x01 漏洞描述 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和

null 92 Nov 9, 2022
ShiroExploit 是一款 Shiro 可视化利用工具,集成密钥爆破,命令回显内存马注入等功能

ShiroExploit Shiro 可视化利用工具(beta 免责声明 该项目仅供合法的渗透测试以及爱好者参考学习,请各位遵守《中华人民共和国网络安全法》以及相应地方的法律,禁止使用该项目进行违法操作,否则自行承担相关责任 目前已实现: 支持密钥爆破以及 CBC/GCM 两种加密模式 可修改特征头

天下大木头 119 Jan 25, 2022
A personal blog based on Vue+SpringBoot+MySql+Redis+Shiro+JWT

项目:Vue-SpringBoot-PersonalBlog 个人博客网址:http://www.huchao.vip/blogs CSDN:毛_三月 介绍 一个基于SpringBoot + Vue+MybatisPlus+Shiro+JWT+Redis开发的前后端分离博客项目,带有超级详细开发文档

Chao. Hu 26 Dec 20, 2022
Spring-Boot-Plus is a easy-to-use, high-speed, high-efficient,feature-rich, open source spring boot scaffolding

Everyone can develop projects independently, quickly and efficiently! What is spring-boot-plus? A easy-to-use, high-speed, high-efficient, feature-ric

geekidea 2.3k Dec 31, 2022
热部署插件deployment-plus,支持文件动态热编译

deployment-plus 热部署插件deployment-plus,支持文件动态热编译 ##使用方式: package com.deployment; import com.deployment.polling.filepolling.ClassLoaderActuator; /** *

ycsky 7 Apr 1, 2022
Spring Boot starter for JustAuth Plus.

Spring Boot starter for JustAuth Plus.

Fujie 5 Jun 23, 2022
The combined power of JUnit, Guice and Mockito. Plus it sounds like a cool martial art.

The combined power of JUnit, Guice and Mockito. Plus it sounds like a cool martial art. So you started using dependency injection because somebody tol

Arcbees 270 Sep 19, 2022
mall学习教程,架构、业务、技术要点全方位解析。mall项目(40k+star)是一套电商系统,使用现阶段主流技术实现。涵盖了SpringBoot 2.3.0、MyBatis 3.4.6、Elasticsearch 7.6.2、RabbitMQ 3.7.15、Redis 5.0、MongoDB 4.2.5、Mysql5.7等技术,采用Docker容器化部署。

mall学习教程 简介 mall学习教程,架构、业务、技术要点全方位解析。mall项目(40k+star)是一套电商系统,使用现阶段主流技术实现。涵盖了SpringBoot 2.3.0、MyBatis 3.4.6、Elasticsearch 7.6.2、RabbitMQ 3.7.15、Redis 5

macro 11.7k Jan 8, 2023
mall-swarm是一套微服务商城系统,采用了 Spring Cloud Hoxton & Alibaba、Spring Boot 2.3、Oauth2、MyBatis、Docker、Elasticsearch、Kubernetes等核心技术,同时提供了基于Vue的管理后台方便快速搭建系统。mall-swarm在电商业务的基础集成了注册中心、配置中心、监控中心、网关等系统功能。文档齐全,附带全套Spring Cloud教程。

mall-swarm 友情提示 快速体验项目:在线访问地址。 全套学习教程:《mall学习教程》。 Spring Cloud全套教程:《SpringCloud学习教程》。 专属学习路线:学习不走弯路,整理了套非常不错的《mall专属学习路线》。 项目交流:想要加群交流项目的朋友,可以加入mall项目

macro 9.7k Jan 3, 2023