帆软爱好者
编程爱好者
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
解决Iframe嵌入帆软BI系统后,Chrome升级后跨域出现登录界面,Cookie写入不成功。解决办法
当我们使用Iframe嵌入fine BI的页面时,由于google chrome的高版本为了防止CSRF攻击,默认将Cookie的SameSite设置为lax了,导致 cookie跨域的时候就写不成功了,所以导致嵌入的iframe出现登录界面。这是咋们可以自己手动来写这个cookie,并且将SameSite的值设置为none。我们只需要在嵌入的url上加上fine_auth_token,通过拦截器获取到fine_auth_token,然后强行写入,我们写一个帆软插件,实现一个EmbedRequestF.原创 2021-12-25 19:55:09 · 5495 阅读 · 0 评论
-
浅谈帆软报表的权限授权,以便于二次开发
我们知道帆软报表的决策系统里有权限管理菜单,这里面首先分为两大类: 普通权限配置:就是将目录权限,人员管理,管理系统中的功能授权到部门,角色,或者具体的人身上。授权权限配置:就是某个人他拥有某个目录权限,人员管理,管理系统中的功能的权限,但是他希望他自己可以把这个功能也可以授权给别人,这里相当于给这个人某个功能的授权的权限,否则他不能授权给别人。 然后每个下面又分为:权限快速配置:将目录,人员管理,...原创 2021-12-18 16:21:35 · 3889 阅读 · 2 评论 -
帆软报表的excel导出,插件开发可用
当我们在插件开发的过程中,需要使用excel格式导出一些自己的数据,我们可以使用帆软报表内部的excel导出的相关代码,没必要去使用第三方框架来做excel导出。通过研究帆软内部的excel导出的相关代码,com.fr.design.actions.file.export.ExcelExportAction,最后找到了excl导出的核心代码片段: String excelFileName = UUID.randomUUID().toString() + ".xls"; File原创 2021-12-18 11:59:37 · 3770 阅读 · 0 评论 -
帆软报表决策系统重置用户密码插件
如果我们一不小心忘记了决策系统的密码,通过本插件可以重置用户密码。本插件一共有三个接口: 1http://localhost:8075/webroot/decision/user/getAllUsers 查询当前所有用户名2 http://localhost:8075/webroot/decision/user/resetallpasswd?passwd=123456 将所有用户的密码重置为1234563http://localh......原创 2021-10-26 20:07:35 · 6460 阅读 · 7 评论 -
finereport前端组件类思维导图
总结finereport前端组件类思维导图原创 2021-10-15 20:59:40 · 971 阅读 · 1 评论 -
当我们写Controller时,VisitRefer注解是干什么的。
当我们自己写帆软报表的Controller时,可能会在类,方法上增加VisitRefer注解,其格式一般为:@VisitRefer( refer = {"decision-management-directory"})这样写的意思就是,要访问这个Controller里的方法,当前用户必须必须满足key为decision-management-directory对应的一个类的验证,只有这个类的验证通过才能访问这个方法。说白了,就是加了 这个注解,我们要访问这个方法必须经过一个验证成功后才行原创 2021-10-04 10:47:34 · 284 阅读 · 0 评论 -
com.fr.decision.webservice.v10.login.LoginService
LoginService主要提供跟登录相关的功能。//判断是否登录过了public boolean isLogged(HttpServletRequest req)//用户名,密码登录public LoginResponseInfoBean login(HttpServletRequest req, HttpServletResponse res, LoginRequestInfoBean loginReqInfo) throws Exception//验证码登录public LoginR.原创 2021-10-03 23:40:44 · 1184 阅读 · 0 评论 -
帆软报表登录过程
1 帆软报表默认的登录是调用com.fr.web.controller.decision.api.auth.LoginResource中的login方法,如下: @RequestMapping( value = {"/login"}, method = {RequestMethod.POST} ) @ResponseBody @DeviceBinding( autoBindFirstDevice = tru...原创 2021-10-03 22:56:31 · 2066 阅读 · 0 评论 -
简单分析帆软报表中一次HTTP请求的过程。
我们知道帆软Report本质是一个web项目,所以他也有filter,servelt。当一个请求来到时,先经过filter,然后再经过servlet。第一步,要经过的filter:帆软报表内部加了7个filter。他们分别是:ApplicationFilterConfig[name=encodingFilter, filterClass=com.fr.third.springframework.web.filter.CharacterEncodingFilter]...原创 2021-10-02 11:47:28 · 1522 阅读 · 0 评论 -
解决Iframe嵌入帆软BI系统后,Chrome升级后跨域出现登录界面,Cookie写入不成功。
1 先看效果:cookie写入不成功,是因为google chrome的高版本为了防止CSRF攻击,默认将Cookie的SameSite设置为lax了,导致cookie跨域的时候就写不成功了。如果我们在嵌入页面的url上加上fine_auth_token参数值会怎样呢?看下图:从上面看出当请求我们的BI页面时,Set-Cookie那里有个黄色的感叹号,表示cookie写入失败了,那一行小字说的是 SameSite=Lax了,所以跨域就写不了Cookie了。为了解决这个问.原创 2021-09-30 15:58:06 · 5330 阅读 · 6 评论 -
帆软报表邮箱验证码登录
安装插件之后,需要在\webroot\customerlogin下写配置文件email.xml,内容为: <root> <emailAccount>邮箱发送者的账号</emailAccount> <emailPassword>邮箱发送者密码</emailPassword> <emailSMTPHost>邮箱的smtp服务器地址</emailSMTPHost></root> ...原创 2021-09-16 13:46:38 · 1137 阅读 · 0 评论 -
帆软报表登录-某些用户需要用自定义的登陆界面,有些用户用默认登录界面
当我们做项目的时候,考虑到安全,可能存在这样的需求,对外客户需要用 自定义的登录(比如验证码,第三方token),对内用默认的登录界面就行了。本插件就可以实现该功能。插件已经上传到资源里了,名字叫:使用自定义登录界面的插件 当我们做项目的时候,考虑到安全,可能存在这样的需求,对外客户需要用 自定义的登录(比如验证码,第三方token),对内用默认的登录界面就行了。本插件就可以实现该功能。 插件 使用说明: 装好插件之后,需要在webapps\webroot下创建文件夹cus原创 2021-09-15 21:23:43 · 1813 阅读 · 0 评论 -
安装自己写的插件时,报插件版本过高,请升级JAR包或者安装低版本插件的问题
今天安装一个自己写的插件遇到这个问题,没有解决,把跟踪过程记录一下。首先是在菜单栏上的服务器上点插件管理,这个就去看com.fr.design.actions.server.PluginManagerAction public void actionPerformed(ActionEvent e) { OSBasedAction osBasedAction = OSSupportCenter.getAction(PMDialogAction.class);...原创 2021-09-13 18:04:49 · 2468 阅读 · 1 评论 -
帆软报表设计器菜单栏介绍之二文件菜单
如图所示,文件菜单下的选项包括: 新建普通报表,新建聚合报表等10几个菜单选项。下面列一下每个菜单项对应的Action:菜单选型 Action 新建普通报表 NewWorkBookAction 新建聚合报表 NewPolyReportAction 新建决策报表 NewFormAction 打开 OpenTemplateAction 打开...原创 2021-09-13 11:16:58 · 933 阅读 · 0 评论 -
帆软报表设计器菜单栏介绍之一
帆软报表设计器的菜单栏就是以及所示的内容,前面已经说了这些菜单是如何,在哪创建的,当点击这些菜单项时,会调用一系列的Action,这些Action位于fine-report-designer.jar的com.fr.design.actions包下,如图:下面就重点来介绍下这些Action。...原创 2021-09-12 22:57:47 · 1350 阅读 · 0 评论 -
帆软报表重要Activator之DesignerInitActivator之五EastRegionContainerPane设计器的属性面板
EastRegionContainerPane就是这个区域。1com.fr.design.mainframe.EastRegionContainerPane 1.1 构造函数 private EastRegionContainerPane() { this.initPropertyItemList(); this.defaultPane = this.getDefaultPane(Toolkit.i18nText("F...原创 2021-09-12 21:37:45 · 429 阅读 · 0 评论 -
帆软报表重要Activator之DesignerInitActivator之五CenterRegionContainerPane设计器的表格区域
CenterRegionContainerPane管理的区域就是上图的区域。1 他的构造函数 public CenterRegionContainerPane() { this.toolbarPane.setLayout(FRGUIPaneFactory.createBorderLayout()); this.eastPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); ...原创 2021-09-12 18:42:29 · 453 阅读 · 0 评论 -
帆软报表重要Activator之DesignerInitActivator之四WestRegionContainerPane 设计器的左边部分文件列表以及数据集的部分
WestRegionContainerPane包含的就是上边两部分。原创 2021-09-12 11:33:32 · 373 阅读 · 0 评论 -
帆软报表重要Activator之DesignerInitActivator之三NorthRegionContainerPane 主要是设计器菜单栏的部分
前面分析了帆软报表设计器主界面采用了BorderLayout布局,如下图:1 NORTH布局部分,这个部分放到的NorthRegionContainerPane。他是设计器的Menu部分。下面来分析下这个类。 1.1 构造函数 public NorthRegionContainerPane() { ToolBarMenuDock ad = DesignerContext.getDesignerFrame()...原创 2021-09-07 12:09:41 · 410 阅读 · 0 评论 -
帆软报表重要Activator之DesignerInitActivator之二
前面说到主界面的实际创建是在DesignerFrame的构造函数中,再次看看它的构造函数:public DesignerFrame(ToolBarMenuDock ad) { this.setName("designer_frame"); this.ad = ad; this.initTitleIcon(); this.setTitle(); DesignerContext.setDesignerFra...原创 2021-09-07 10:54:50 · 355 阅读 · 0 评论 -
帆软报表重要Activator之DesignerInitActivator之一
前面介绍了DesignerStartup,DesignerStartup中创建了帆软报表设计器的启动界面,那么报表的主界面是在哪创建的呢,就是在com.fr.start.module.DesignerInitActivator中创建的。该类位于fine-report-designer.jar包中.1DesignerStartup的start方法: public void start() { PluginClassRefreshManager.getInsta...原创 2021-09-06 17:51:07 · 455 阅读 · 0 评论 -
帆软报表重要Activator之DesignerStartup中的GlobalListenerProvider扩展开发
上一篇我们说了DesignerStartup的启动过程中有一个GlobalListenerProvider扩展,这个扩展是一个监听键盘事件的监听扩展。先看效果: 当监听到键盘事件时,弹出提示。1 先看插件项目结构: 需要实现两个类,一个是provider,一个是listener2 plugin.xml中的配置: 这个扩展是配置到extra-designer节点下,扩展xml标签名字...原创 2021-09-06 11:02:17 · 448 阅读 · 0 评论 -
帆软报表重要Activator之DesignerStartup
com.fr.start.module.DesignerStartup位于fine-report-designer.jar中,也是designer-startup.xml中的第一个activator,也是根activator。它主要处理设计器界面相关的功能.1 beforeAllStart方法: public void beforeAllStart() { BuildContext.setBuildFilePath("/com/fr/stable/build.properties.原创 2021-09-05 18:01:04 · 596 阅读 · 0 评论 -
深入了解帆软报表系统的启动过程-总结
通过前面的介绍,我们知道了帆软报表启动时是通过加载designer-startup.xml配置文件,创建Activator,Module来完成帆软报表的功能。帆软报表将功能分配到各种Activator中,帆软报表中总共有如下Activator: DesignerStartup PreStartActivator VirtualActivator FineAnalyzerActivator: TenantActivator PreLoadActivator...原创 2021-09-05 16:39:40 · 1342 阅读 · 0 评论 -
深入了解帆软报表系统的启动过程三
sss现在介绍下Module,Activator,Context这三者的关联。1 com.fr.module.Context,简单理解就是上下文。先看看它的源码public abstract class Context implements FineExecutor, ModuleStableRepository, ModuleVerifiability, EventEntry { private Module module; public Context() { }原创 2021-09-05 14:22:12 · 509 阅读 · 0 评论 -
深入了解帆软报表系统的启动过程二
前面说到MainDesigner的main方法中通过ModuleContext来加载解析designer-startup.xml的。下面详细说说具体过程。1ModuleContext位于fine-core.jar包下,com.fr.module.ModuleContext,看一下它的parseRoot方法public static synchronized Module parseRoot(String var0) { assert StringUtils.isNotBlan.原创 2021-09-05 13:24:15 · 621 阅读 · 0 评论 -
深入了解帆软报表系统的启动过程一
1 帆软报表的启动类为:com.fr.learn.Learner,它的main方法如下: public static void main(String[] args) { try { Class mainClass = Class.forName("com.fr.start.MainDesigner"); invokeMain(mainClass, args); } catch (ClassNotFoundExceptio原创 2021-09-05 12:49:26 · 1081 阅读 · 0 评论 -
帆软报表-通过代码来创建一个模板文件
1 应用场景 我们通过代码来批量生成模板文件,并且可以包含数据集定义或者增加表格数据2 创建模板代码:WorkBook wb = new WorkBook();这样就创建了一个模板文件对象3 给这个模板对象增加数据集定义 首先数据集定义需要三个属性:数据集名称,数据集SQL语句,数据集连接名称 private void createTableDataSet(WorkBook wb,String name,String...原创 2021-06-29 15:55:18 · 882 阅读 · 0 评论 -
帆软报表插件开发之fine-decision中的MessageEventProvider扩展
1MessageEventProvider用来当系统产生消息时,会调用MessageEventProvider扩展。2MessageEventProvider接口定义://// Source code recreated from a .class file by IntelliJ IDEA// (powered by FernFlower decompiler)//package com.fr.decision.fun;import com.fr.stable.fun....原创 2021-06-13 22:45:20 · 661 阅读 · 0 评论 -
帆软报表插件开发之fine-decision中的LogInOutEventProvider扩展
1 当我们登录或者登出帆软决策系统时,会调用我们的扩展,这时我们可以做一些事情。2 接口定义//// Source code recreated from a .class file by IntelliJ IDEA// (powered by FernFlower decompiler)//package com.fr.decision.fun;import com.fr.decision.webservice.login.LogInOutResultInfo;import co原创 2021-06-13 17:48:36 · 1103 阅读 · 0 评论 -
帆软报表插件开发之fine-decision中的ControllerRegisterProvider扩展
1 用于在帆软报表中编写自己的cocntroller处理2 接口定义package com.fr.decision.fun;import com.fr.stable.fun.mark.Mutable;public interface ControllerRegisterProvider extends Mutable { String XML_TAG = "ControllerRegisterProvider"; int CURRENT_LEVEL = 1; C原创 2021-06-13 13:55:17 · 861 阅读 · 0 评论 -
帆软报表插件开发之fine-decision中的GlobalRequestFilterProvider扩展
1 之前说了EmbedRequestFilterProvider只能对/decision/*下的url进行过滤,如果是我们自己再帆软报表开发的请求也需要过滤器功能,就可以扩展GlobalRequestFilterProvider2 先看接口定义public interface GlobalRequestFilterProvider extends Mutable, Comparable<GlobalRequestFilterProvider> { String MARK_STR原创 2021-06-13 11:29:59 · 876 阅读 · 0 评论 -
帆软报表插件开发之fine-decision中的EmbedRequestFilterProvider扩展
1EmbedRequestFilterProvider扩展实现了web项目中的过滤器的功能2 接口定义:public interface EmbedRequestFilterProvider extends Mutable { String MARK_STRING = "EmbedRequestFilterProvider"; int CURRENT_LEVEL = 2; void init(FilterConfig var1); void filter(Ht.原创 2021-06-06 21:42:15 · 833 阅读 · 0 评论 -
帆软报表插件开发之fine-decision中的AccessProvider扩展
1AccessProvider 扩展点属于fine-decision.jar包中定义的扩展点.2AccessProvider用在自定义登录中的使用token的登录方式才生效。3AccessProvider的接口定义为:public interface AccessProvider extends Mutable { String MARK_STRING = "AccessProvider"; int CURRENT_LEVEL = 1; boolean ac...原创 2021-06-06 16:52:27 · 838 阅读 · 0 评论 -
帆软报表插件开发系列之plugin.xml
plugin.xml文件中的所有节点的定义是在fine-core.jar中的com.fr.plugin.xml.PluginElementName中定义的,内容如下:Id("id"), Name("name"), Version("version"), EnvVersion("env-version"), AppVersion("app-version"), RequiredJarTime("jartime"), MD5Key("md5-key"), Price("pric原创 2021-06-06 15:24:45 · 1369 阅读 · 2 评论 -
帆软报表登录背后得逻辑
帆软报表本质是一个web项目,里面自然少不了servlet,filter等相关概念。首先当帆软报表启动时,调用com.fr.decision.base.DecisionServletInitializer, 该类对filter,servlet进行初始化:1 注册filter,注册很多filter,包括CharacterEncodingFilter,GzipFilter,PluginStoreFilter以及通过扩展EmbedRequestFilterProvider,GlobalRequestFi.原创 2021-05-31 16:23:15 · 712 阅读 · 0 评论 -
帆软报表决策系统 第三方token登录
有时候可能我们想使用第三方得数据来进行登录,此时需要使用平台得/login/third/auth接口来实现第三方得数据登录。第三方登录需要三个参数:username,password,thirdToken,需要实现AccessProvider扩展来进行对第三方数据进行校验。js代码: var thirdLogin = function(){ $.ajax({ url: "/webroot/decision/login/third/auth",原创 2021-03-26 16:57:10 · 4011 阅读 · 0 评论 -
帆软报表决策系统跨域登录
一般我们会将帆软系统通过iframe集成进来,会遇到两个问题,一个是登录,一个是跨域问题,比如我们需要预览一个模板文件:http://localhost:8075/webroot/decision/view/report?viewlet=%25E7%25AC%25AC%25E4%25B8%2580%25E6%25AC%25A1%25E5%25A1%25AB%25E6%258A%25A5.cpt,当我们集成到iframe中时,如果我们再决策系统中将该模板加入模板验证中,当我们没有登录时,会直接进入到登录界面原创 2021-03-26 15:13:13 · 3685 阅读 · 3 评论 -
帆软报表决策系统自定义登录界面 使用验证码登录 教程二
前面说到调用获取验证码接口后,会向我们的邮箱发送验证码,并且接口会返回一个captchaSendToken。下一步就是使用验证码来进行登录,进行登录之前需要调用接口/webroot/decision/captcha/check来验证我们输入的验证码,代码如下:var checkCaptcha = function () { $.ajax({ url: "/webroot/decision/captcha/check",原创 2021-03-26 10:50:06 · 1749 阅读 · 0 评论 -
帆软报表决策系统自定义登录界面 使用验证码登录 教程一
今天来说说自定义登录页面中,使用验证码来登录,关于怎么自定义登录界面可以看我前面的教程,先上图片:从界面看分两步: 第一步使用用户名,邮箱来接收验证码 第二步,使用接收到的验证码来登录。从代码上看需要调用三个接口: 第一个:通过/webroot/decision/login/captcha/gain 请求让系统发送验证码到邮箱。 第二个:通过/webroot/decision/captcha/check 请求来验证你通过邮箱获取到的验证码(这是自己写的controlle...原创 2021-03-25 22:34:52 · 3894 阅读 · 0 评论
分享