最近在学用JFinal,跑了跑demo,照着教程弄了几个界面,看着源码,挺有启发的。一些之前没接触过的东西,现在试着花时间去学。发现自己也是喜欢编程的。(是否要讨论下开源对指导程序员学编程的作用?)
进了群,看别人吹水,发现能了解到很多东西,氛围跟OSC一样的热闹,倍感欣慰。
了解了一下前端框架bootstrap,模板freemarker。用了Dreampie开发的一些Jfinal插件。倍感亚历山大。要学的东西还很多,需要花更多时间才能跟得上,不然拖国家平均工资的后腿就不好了。
本周就是SHIRO了。
--------------------------------------------- 分割线 2014.12.30 -----------------------------------------
Shiro的学习心得。
阅读了张开涛的博客jinnianshilongnian.iteye.com,里面关于Shiro有很详细的介绍,理论知识得到了提高。
看了Dreampie的jfinal-demo,里面用到了他自己写的Shiro插件,想着简单易用直接导入运行他的demo,没想到导入进去之后发现很多jar包maven没导好,不知道是否我的maven没有设置好的缘故,所以项目一直搭不起。
之后只能拆他的demo。
表结构用了他推荐的几张表,Shiro的认证和授权用了MyJdbcRealm,MyJdbcAuthzService暂时不知道什么时候用到(debug了一下,发现是启动项目的时候预加载角色和权限的),MyJdbcRealm这个类要在shiro.ini配置文件给SecurityManager提供自定义Realm
#realm jdbcRealm = com.demo.common.shiro.MyJdbcRealm securityManager.realm = $jdbcRealm
model跟表的映射用了TableBind插件,路径跟controller的映射用了RouteBind插件。
暂时测试了登录功能,登录成功后,会根据表中Role的Value值,去到哪个URL,设置地方在shiro.ini里面
;不同角色登陆到不同的url,R_USER:/order可以不配置,会默认使用successUrl authc.successUrlMap = R_USER:/order,R_MEMBER:/order/region,R_MANAGER:/order/branch,R_ADMIN:/
我用他数据库的初始化数据,账户的Role为管理员,即R_ADMIN,所以登录成功后去到的路径为“/”。
----------------------------------------------------分割线-----------------------------------------------------
题外内容,基础很重要,要多熟悉。
1、认识HttpServletRequest对象
ServletRequest是接口,Http是现在流行的协议,(红薯)通过HttpServletRequest对象,可以得到用户(我)发给(OSC)的请求,里面中的一些东东。
String uri=request.getRequestURI(); String rad=request.getRemoteAddr(); String rh=request.getRemoteHost(); String ru=request.getRemoteUser(); int rp=request.getRemotePort(); String cp=request.getContextPath(); String la=request.getLocalAddr(); String ce=request.getCharacterEncoding(); String gm=request.getMethod(); String qs=request.getQueryString();
print:
====== This will get 客户机信息 start ==== URI:/jfinal-fire/blog RemoteAddr:0:0:0:0:0:0:0:1 RemoteHost:0:0:0:0:0:0:0:1 RemoteUser:null RemotePort:56550 ContextPath:/jfinal-fire LocalAddr:0:0:0:0:0:0:0:1 CharEncoding:UTF-8 Method:GET QueryString:null ====== This will get 客户机信息 end ====
舉個栗子,只是想知道里面有什么东西而已。
2、认识Filter过滤器
写在web.xml中。可作用于进入Servlet之前,以及在退出Servlet之后;
使用它可以方便改变一个request和修改一个response,它能够在request到达Servlet之前预处理request,也可以再response离开Servlet时处理response。换种说法,Filter就是一个“Servlet Chaining”。
定义个MyFilter,当然是要实现Filter接口了。然后直接在web.xml中加上去。
<!--自定义过滤器 start--> <filter> <filter-name>logFilter</filter-name> <filter-class>com.demo.common.kit.LogFilter</filter-class> </filter> <filter-mapping> <filter-name>logFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--自定义过滤器 end-->
之后呢,有什么自定义的属性,就先在init里面初始化。自己的FilterConfig config没法工作,原来是没先在这里给他找对象。
运行部分就在doFilter()里面了。
ServletContext context=getFilterConfig().getServletContext();
终于让我拿到ServletContext了。
3、final
修饰的类不可以被继承,有终结的意思;
修饰的方法不可以被重写Override;
修饰的属性为常量,要不声明时赋值,要不构造器中赋值(所有);
若属性为原生数据类型,则值不变;若属性为引用类型,则引用地址不变,引用的对象本身可以变。
(栈里的值不变;堆里的值可变)