每天进步一点点
2016-11-08
1、安装activiti-eclipse插件
2016-11-22
1、在配置shiro的配置文件的时候报错,查出原因就是下面这行导致的
报错信息:
Cannot convert value of type [org.hibernate.impl.SessionFactoryImpl] to required type [org.apache.shiro.session.mgt.SessionFactory] for property 'sessionFactory': no matching editors or conversion strategy found
具体原因是因为系统在配置hibernate的时候也使用了id="sessionFactory",导致冲突,将其改下名字就OK了
PS:事实证明,上面的方案是不可行的,修改了之后,shiro好使了,但是hibernate获取不到sessionFactory了
所以就用了最笨的方法,如下配置:
新增一个sessionFactory的实现
然后注入:
2016-11-23
1、还是折腾shiro,要做一个踢出用户的功能
之前用Spring Secutity 是有一个方法,直接就可以踢出指定的用户,所以形成了固化思维,一直在shiro中找类似的方法。
但是shiro貌似没有直接提供,网上抄了一顿,算是找到了个还算靠谱的解决方案:
a:通过sessionDao获取所有的activeSession,如果与此次登录的名称相同,则打一个标签:session.setAttribute('踢出去',TRUE)
b:写一个拦截器,配置在shiroFilter中,如果发现 '踢出去' 的标记,就调用subject.logout()方法登出
c:在shirofilter中配置b中的拦截器并使用到要拦截的url中,诸如:/**=forceout,authc 其中forceout是自定义的拦截器
网上搜一下ForceLogoutFilter,应该会有一堆结果
之前走了一个更弯的路,之前如果判断出用户名相同,我直接session.setTimeOut(0),将session设置为失效,貌似是好使的
但是,反复测试会发现,sessionDao还是能获取到之前的session(shiro可能不是这么判断session失效的)
2、继续折腾shiro,又出了一个幺蛾子:浏览器直接输入程序地址后,跳转到login界面的时候出现了JSESSION,就像这个样子:
http://127.0.0.1/xxxx/login.jsp;JSESSIONID=2ede9ebf-b0c0-48ac-b67a-044c3e841dde
登陆后,shiro认证失败,网上查了一下大概原因:应该是跟浏览器的cookies有关,其实更换一下struts2jar的版本就行了,太低的版本对这个支持不太好,但是我用的是公司的框架,TNND把SSH集合到一个jar了,不太好换,所以采用拦截器的方式解决
网上搜一下:DisableUrlSessionFilter ,应该会有还多转载的
2016-12-30
1、IDEA断点进不去
除了网上一堆的关于增加JAVA_OPTS的,很有可能就是点击了下图的 “禁用断点”
2、用惯SVN的人肯定会习惯于 * 号,but sorry ,idea没有,只能通过颜色的变化来区别是否进行了修改
而且,默认是不级联的,什么意思呢,就是你改了文件A,A变色了,但是A所在的文件夹就跟没事人一样不变色
如果想让他变,那么需要把 settings >> Version Control >> Show directories with changed descendants 前面的checkbox勾上
3、关于添加版本控制
这点要吐槽一下,可能是我这里代理的问题,github就算设置了代理,一样上传不上去
改用SVN,记着,安装客户端的时候一定记着安装svnshell,安装的时候,那个是默认关闭的
或者,如果你喜欢,可以选择安装sliksvn
而且,通过 VCS >> Import into version control >> share XXX 只share了一个目录
上传代码也是上传不上去,慢的要死,需要注意的是,注意选对SVN的版本,现在IDEA默认给出3个选择:
1.6 1.7 1.8 我们单位的server比较老,选择的1.6
2017-1-4
SPRINGMVC 默认是会拦截所有请求的,所以,如果想让你的css js 等静态文件正确显示,其中一种办法是在web.xml
中为这些静态的文件指定默认拦截器,如下:
default *.css
2017-1-9
SPRINGMVC4 配置json返回
text/html;charset=UTF-8
使用springmvc转换json的时候,它默认把我实体中的字段都设置成了小写,一个解决办法:
在要转换的实体中使用@JsonProperty("pId")进行标注
2017-1-12
今天要把基于hibernate的项目的数据库从mysql换为informix,方言什么的都换了,查数据库的时候还是报错,调试了一下发现执行
select 1 报错,这个是在hibernate中配置的,如下:
informix应该换为:
以前用dbcp这个不是必须的,但是换为dbcp2之后,这个是必须项
2017-2-6
activiti使用
今天把activiti的流程整通了一次,并做一些总结:
一、开发步骤
1、首先画流程图,我使用的idea中文老有乱码,所以我就在eclipse的插件中画了
a:参与者 在Main config中的Assignee中配置,可以写成变量${xxx}在启动流程或者完成当前task的时候指定
下面的是在完成当前task后指定,变量boss的值为aaas
Map
vs.put("boss","aaas"); processEngine.getTaskService().complete(task.getId(),vs);
b:可以指定Listener
listneter主要有三种,全局的、连线的、task级的,观察者模式
2、部署
新部署的不会覆盖老的部署,会产生最新的版本,新启动的流程都取最新的部署
如果有一个流程是在老部署的基础上提交的,并且没有完成,那么它的后续操作一样会沿用老部署的
Deployment deployment = processEngine.getRepositoryService().createDeployment()
.name("helloactiviti入门1").addClasspathResource("activiti/diagrams/HelloWorld.bpmn")
.addClasspathResource("activiti/diagrams/HelloWorld.png").deploy();
3、启动流程
一次部署,多次启动,下面是一个指定参与者的
Map
vs.put("userId","admin"); RuntimeService runtimeService = processEngine.getRuntimeService(); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("bpmn文件中的id",vs);
4、执行流程
具体的流程
二、应用到项目中的思路
1、在录入新业务的时候,启动工作流实例,获取流程实例ID:ProcessInstanceId,并与业务ID进行绑定(新建一张业务关联表)
2、根据当前登录用户的ID获取其待办任务
Listtasks = processEngine.getTaskService().createTaskQuery().taskAssignee("用户ID").list();
3、根据待办任务可以获取流程实例ID:ProcessInstanceId
task.getProcessInstanceId()
4、根据3中的ID即可关联到业务ID,然后进行业务的复杂操作
2017-2-6
quartz自动任务,启动的时候报错,但是能正常启动
2016-04-1914:00:37.281 [main] DEBUG o.s.s.a.ScheduledAnnotationBeanPostProcessor -Could not find default ScheduledExecutorService bean org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.scheduling.TaskScheduler] is defined
需要增加如下配置:
<task:executor id="executor" pool-size="5" /> <task:scheduler id="scheduler" pool-size="5" /> <task:annotation-driven executor="executor" scheduler="scheduler" />
2017-02-10
一、redis客户端输出中文,出现了\xe6\x89\x8b\xe7\xbb\xad\xe8\xb4\xb9 的16进制
在启动客户端的时候增加参数 --raw即可
./redis-cli --raw
二、用spring-data-redis连接的时候,后台报错无法验证,没有其他明确的提示,要注意redis是否运行在protect mode下
可以设置密码 config set requirepass xxxxx