TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
以上框架 可以说项目中基本都没有接触过除了hibernate、当然了那也是hibernate3。springMvc虽然接触过一点点 也是以前有时间做的小demo、根本不值一提。 ( T4 h" l* i) C2 i5 y6 J2 Y
$ V U8 w7 k' x 因为现在接触的大都是S2SH、所以有时候就不太想接触新的事物、主要感觉现在的已经不错了、没必要去改变什么。最近也是急需补充自己、当然也是为了技术储备、更深入的了解各个框架、以后也可以适应各个公司的不同需求做准备。 ! n7 S: t& \& T$ b- _
9 s9 l' |8 h# [) J( @ ] Shiro 是 java 世界权限框架、以前听说过、但一直没有拿来实验、反正以前的后台权限基本为零或者乱七八糟的不好评论。
) D9 t, i5 R* j" Y# W7 ]
" _: h, H+ m6 l( c2 |0 w2 l 这里说一下HTTL(以前根本没有听说过)、这里淘宝的一位大牛开发的框架、可谓是一款国产开源框架。HTTL(Hyper-Text Template Language)是一个高性能的开源JAVA模板引擎,适用于动态HTML页面输出,可替代JSP页面,指令和Velocity相似。$ A! N- M6 d5 R& g/ i
& u4 \8 e! w5 M- b: V, z' O# E" v, a下面主要是一些常识性的介绍 秒懂的童靴可以略过。
) s4 F' P8 M/ n" r- b: R2 @9 U9 N, d; s; O, y
; K% g% e2 j. Q* ^- A+ x7 c
一、hibernate3和hibernate4的区别:
& e) p7 D( S- \ FSpring3.1去掉了HibernateDaoSupport类。hibernate4需要通过getCurrentSession()获取session。并且设置7 [, _' u2 @' a- y1 X( k
<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
8 h# R9 O5 }' y3 B3 A0 @, {6 h (在hibernate3的时候是thread和jta)。 2 c1 P5 M$ [5 ^( n: U/ ]4 ` @: m
详细介绍:http://www.52itstyle.top/thread-7344-1-1.html4 v. c6 u+ @ ^! `0 ?% ?
, X4 K5 E; [( D& P9 C二、Spring MVC和struts2的比较的优点:机制:spring mvc的入口是servlet,而struts2是filter(这里要指出,filter和servlet是不同的。以前认为filter是 servlet的一种特殊),这样就导致了二者的机制不同,这里就牵涉到servlet和filter的区别了。
/ F7 @/ b! X- s- Y详细介绍:http://www.52itstyle.top/thread-7346-1-1.html
8 j. L$ t3 J, w1 R( u, ^+ x0 {; A' A$ K( h2 v4 i2 T& h P3 {) M
4 x; F, X+ s$ c I二、HTTL详细介绍:
7 v! l& z: N) G0 K' U: X' d将模板编译成JAVA字节码运行,并使用强类型推导,减少运行期反射和转型, 渲染速度接近Java硬编码输出,比Velocity等其它模板引擎快一个数量级。 比JSP也快,因为JSP只有Scriptlet是编译的,Tag和EL是解释执行的,而HTTL是全编译的。 6 b/ \) N, {" Z- j$ H, Z
详细介绍:http://www.oschina.net/p/httl. m/ H% @' z" ^7 H
github地址: http://httl.github.io/zh/design.html
8 o; W4 S8 [& q, {3 c
( H( `+ m2 S* f. Z: A, S" y$ X. R1 i! ~. D
四、 shiro安全框架
: Z3 g$ H+ C2 z$ X( JShiro 是 JAVA 世界中新近出现的权限框架,较之 JAAS 和 Spring Security,Shiro 在保持强大功能的同时,还在简单性和灵活性方面拥有巨大优势。本文就带领读者一睹 Shiro 的风采。
( c+ L& O8 y) X2 a详细介绍:http://blog.csdn.net/boonya/article/details/8233303% C8 }8 J! a* N! j0 e! T( L) L
跟我学Shiro目录:http://jinnianshilongnian.iteye.com/blog/201839810分钟教会你简单的使用Shiro:http://www.52itstyle.top/thread-7366-1-1.html; y8 z: K9 K; o! o7 W2 I6 m/ `1 N3 N
=====================华丽的分割线===========================
0 z5 K4 X2 m2 N' X9 ~9 z0 I2 y
8 |: B! o5 V8 \4 D1 U 好了 说了那么多、回到项目上来。搜遍全网也没有找到类似的可以参考的项目源码并且带jar包的、只是找了一个pom.xml以及相关配置、但是~没有源码。只能自己配置了。
, B# q7 P, P$ H
& X i$ b1 e1 ?; X/ i2 \
7 i" t5 h- X: y) J; ]6 I( a 既然拿到pom.xml文件就好说了、下面就是搭建maven项目并下载所需jar包。一般的开发工具都会自带maven、只需相应的配置即可。
& k% K% H: a) v7 c7 e1 K 参考(http://jingyan.baidu.com/article/ea24bc39b1a8c7da63b33159.html)
* P h, b; c p- c3 l/ X
) u& I/ _6 t# K1 B: Y0 T" N! U一、shiro基本配置" Z5 [" _( G$ s3 A) _- }1 A$ i7 Y, S+ `
2 o. ~- r- W9 {- K$ J; J' C# a
applicationContext-shiro.xml:
0 d. d* [ P" E1 P9 n: Q$ n- <!-- 自动扫描-->; s. a, }; j$ `
- <context:component-scan base-package="com.*"/>% L$ ?- P. M) |
- <!-- 用户授权/认证信息Cache, 采用EhCache 缓存-->
t- a+ D* u5 t N: J - <bean id="shiroEhcacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">& N6 v/ H" ] _- _
- <property name="cacheManagerConfigFile" value="classpath:ehcache-shiro.xml"/>
3 }0 r$ Q5 v! B - </bean>
2 j, W% B n* `' a - <!-- 继承自AuthorizingRealm的自定义Realm,即指定Shiro验证用户登录的类为自定义的UserRealm.java -->
( c* U- v4 b, w& I - <bean id="shiroRealm" class="com.itstyle.web.realm.UserRealm"/>" e, X- u+ H( f+ H, J
- <!-- 基于Form表单的身份验证过滤器 -->; u' c! ]# ^' w& v+ ]
- <bean id="formAuthenticationFilter"
& N' I0 F: u% v' T - class="org.apache.shiro.web.filter.authc.FormAuthenticationFilter">( e4 c( @$ t$ O6 E2 y% M. d
- <property name="usernameParam" value="username" />
3 {. S3 N/ ~$ J5 t- F. z* v - <property name="passwordParam" value="password" />1 L+ i5 t; Q2 N7 V8 {
- <property name="loginUrl" value="/users/index.html" />
3 l7 h' o" ]; |8 V( G2 I6 t - <property name="successUrl" value="/index/index.html" />/ h' d2 U$ D! i5 c( h% S5 k
- </bean>
. S% ?3 o5 U0 h; `. h1 u# d - <bean
M. t" G7 q- ], g0 m& C - class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"8 b' e/ V& d( u- C5 e+ H* h% u0 Z
- depends-on="lifecycleBeanPostProcessor">" w+ r, i6 g& i, K( `
- <property name="proxyTargetClass" value="true" />; ]- B; H7 O8 U4 y
- </bean>$ {2 J+ ^" ^: K; d1 ^
-
; C' z! v. Q- C - <!-- securityManager工厂 这里主要是设置自定义的单Realm应用,若有多个Realm,可使用'realms'属性代替 -->
3 u3 n* j& B/ Z" y* s# J4 c- }( s - <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
/ h7 o" b+ Q3 M! t - <property name="realm" ref="shiroRealm" />* u" e0 h7 H8 b1 N& }
- <property name="cacheManager" ref="shiroEhcacheManager" />0 i; C8 E: b) o9 R' r
- </bean>9 H$ s% [7 o2 t
- <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">- J1 r4 s5 ^8 ~! i: s" T
- <!-- 调用自定义的权限管理器 -->6 r3 l4 p/ W; [& Q( y. i
- <property name="securityManager" ref="securityManager" />
|( ~ p5 j9 p0 D8 `6 h - ' E! p/ B7 P6 @& L
- <!-- 配置登陆成功后跳转地址 -->
4 f) w& C- n+ ]' {$ \% m - <property name="successUrl" value="/index/index" />; `: g( _: s6 b( g! B
X2 r* }: f" `5 Q# H9 G+ E- <!-- 配置登陆时请求的地址 -->5 g4 e9 c6 [" R3 @$ Z1 p5 p8 C
- <property name="loginUrl" value="/users/index" />
2 e1 V- y$ ]# z# }* L; u& R" l" V - ! _: @8 P8 h) \! U; ~
1 d7 Q; i2 x( {0 g- <!-- 如果请求的资源不再你的权限范围内,则跳转到error.htm -->
' s. X/ I% f1 Y, R/ ], g! \ - <property name="unauthorizedUrl" value="/users/noAuth" />7 I& O' ^ c1 d, t, h) q, [, y2 H# w" L$ l
$ Q4 Z8 c, Q" \) _, ^* v- `( K- <property name="filters">4 b1 f$ W! X- n' x; `8 h
- <map>
$ q% i' t/ K6 x& Y - <entry key="authc" value-ref="formAuthenticationFilter"></entry>2 {# `! |5 V. }, [2 B' r
- </map>
( \# P9 W& }: T8 p7 p, G% | - </property>
* M! ]+ ^; Q3 [6 _% B1 f - <property name="filterChainDefinitions">- n! b! a# k5 X, @9 R0 T2 S
- <value>
9 z: v: A# t5 a5 Z9 _8 w6 F3 ? - <!-- anon表示此地址不需要任何权限即可访问 -->6 d& g6 `5 G$ j3 I* y$ g
- /users/*=anon7 P( @8 S6 Y6 K
- <!--login页面和logout页面不需要验证 -->4 g6 y& [! W# Q' b' @9 d2 z
- /login* = anon
! \$ \6 Q5 S$ q5 m+ _ - <!--访问所有文件,authc必须通过验证后才能访问 -->. y6 X/ y3 G" W! U: i/ [4 D
- /** = authc3 I- U& C0 D' e! h
- </value>, {9 ~% D2 B& r3 p1 c
- </property>& u) ?3 f4 ~0 N4 k$ Z
- </bean>/ n, K u4 C* a) `3 W) ~3 U
- <!-- 相当于调用SecurityUtils.setSecurityManager(securityManager) -->' E. K6 S' U0 k/ y' V
- <bean% e7 t" U) W5 ]2 a
- class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">7 j8 o- |( F6 E2 z! y, U# f8 D+ h
- <property name="staticMethod": B5 U- j* R4 _! n
- value="org.apache.shiro.SecurityUtils.setSecurityManager" />
8 E7 R/ K: Z% Z9 u* \ \ h9 | - <property name="arguments" ref="securityManager" />
. m8 P+ U" I7 U _3 [' _+ l$ m - </bean>& _9 o& K6 { c( t; B' l6 r
- <!-- Shiro生命周期处理器 -->" K1 g7 w& ~" A
- <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />
复制代码 % v! Z" A1 b. G9 D/ G
UserRealm.java:
; ^' q* N5 X2 W) Y) _/ ]- /**1 g6 ^) F9 q8 L
- * 几个概念: 翻译不好,从官方上找来的原文. 如果不懂请 使用 “有道词典”。来源于: http://shiro.apache.org/java-authentication-guide.html! A" f5 d( V$ R
- * # z8 K+ g3 d! G8 D- d. ~ U
- * Subject Security specific user 'view' of an application user. It can be a human being, a third-party process,
# n6 H" A6 n; v4 T4 Y" W - * a server connecting to you application application, or even a cron job. Basically, it is anything or 1 s4 s Z/ V: U' N. ?# J+ u3 ]
- * anyone communicating with your application.. m7 g9 V7 u% Q8 R6 W
- *
8 e2 D8 [2 a# D7 h0 } - * Principals A subjects identifying attributes. First name, last name, social security number, username
) z+ j' |5 c5 n' K - * % B* X# P i% A1 r6 u7 w
- * Credentials secret data that are used to verify identities. Passwords, Biometric data, x509 certificates,4 |' {2 X" T' }: ^# t; z5 f, K0 T
- *
8 J6 X$ S+ d% P2 }/ v - * Realms Security specific DAO, data access object, software component that talkts to a backend data source. # v% ?; _' v8 {0 ?4 s3 R
- * If you have usernames and password in LDAP, then you would have an LDAP Realm that would communicate ' o* L/ l, V8 V5 a4 O
- * with LDAP. The idea is that you would use a realm per back-end data source and Shiro would know how
% A# ~1 r/ B9 n' X' \" _8 U/ q - * to coordinate with these realms together to do what you have to do.
5 m: `# B! P! k' i: Z% [9 N - *
. Z/ ~2 ~& M- o p! u7 b2 A; v$ X W/ r - */
1 D3 m$ O8 o3 U) @( y% h; j2 ] - public class UserRealm extends AuthorizingRealm {
, l" k! u- Z0 f/ v6 K - @Resource
4 b# J" S( }8 }1 [5 @5 P, Q# B' v - private IUserService userService;
( b; h- ?- U0 j! v - ) r5 {) @' {( E6 K
- /** v1 I5 ]; P$ q5 J; ]" L
- * 权限认证
/ }1 F& E8 I7 e9 r3 c# D - */4 y4 B' D& O' v' ?/ Z
- @Override: z6 O# c, `* \$ \: u8 u
- protected AuthorizationInfo doGetAuthorizationInfo(
2 P8 S+ G7 x+ y0 g - PrincipalCollection principals) {/ i4 l2 g. D1 I x! J2 X G9 p/ F
- SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
' E4 x5 p7 w3 N/ J* ~ D - List<String> roles = new ArrayList<String>(); 7 L" _6 D | n* I; y7 O
- List<String> permissions = new ArrayList<String>();+ k2 Y% q" A, C) n) u& T# m( J; V* T
- System.out.println("由于加入了缓存, 此处只会load一次 ");$ n! s. Q; X% ?" O0 |1 r
- try {
: J. c1 z; h) e& e6 V - Subject subject = SecurityUtils.getSubject();- p7 A+ g5 A! J- C; S' R
- User user = (User) subject.getSession().getAttribute("user");
! A2 w: O+ V/ J" x+ ?7 X3 d _ - if(user!=null){
" A/ S Z& c* M2 M- Q: g+ a0 R+ R4 U, S - if(user != null){2 T2 `" m6 \2 ]2 v1 p/ e& i
- List<Role> roleList = user.getRoleList();
U3 }- p, o- f& a, o - if (!roleList.isEmpty()) {
2 N$ h& a/ Y: I: i# A) Q2 X5 s - for (Role role : roleList) {6 Y0 P) r- m+ n6 @( }* i. n! ?! \3 P/ q
- roles.add(role.getRolename());
6 Q, ~( u4 k, E" v% ^* {) K - List<Permission> prmissionList = role.getPermissionList();
, ?6 E, f" I+ b5 n7 F" U' J0 V - if (!prmissionList.isEmpty()) {& u/ N( K% X( i0 i$ y" j
- for (Permission pmss : prmissionList) {
# I6 ^$ _" P% f- U$ p( S - if(!StringUtils.isEmpty(pmss.getPermissionname())){5 k( D2 H5 z/ _1 ?, W [) m3 j1 q
- permissions.add(pmss.getPermissionname());
2 t+ O) K2 V7 m" _6 [3 R+ T - }
- x0 C' C3 o0 ^& z7 D - }
+ s) J# k1 O4 c: d9 d - }
4 v" b$ [6 y$ I! c* Y - }
* Y: B) d V6 P5 S - }
% H; B4 s# \0 i - //给当前用户设置角色- P6 B6 f' Q" N
- info.addRoles(roles); U; W. x W/ w
- //给当前用户设置权限
- n n1 F' u4 ~$ {1 }: T - info.addStringPermissions(permissions);
- e0 C" h; Q6 u( n1 x7 x - }else{
4 y U# j5 g7 n o - throw new AuthorizationException();4 c9 B f9 W" P+ K- b
- }
9 b8 v7 j3 ?. u2 m1 d, ~& X - }
- \# `& X5 F6 E5 F$ k6 l - } catch (Exception e) {" h2 f; {* \8 ~; {
- e.printStackTrace();
6 |' q6 d/ ~8 M }8 ?" w$ f+ s' n - }: x( p4 y+ a$ a0 Q8 W# o
- return info;9 ]; b' w* Z/ n4 i/ E4 P
- }& F: I @) ~0 Y6 w
- /*
% E) m) m- I' f6 ~9 t# s) ]* y - * 登陆认证
' L% U& E0 f# U; A& ~4 k- t - */
% }( a y9 a+ t0 L1 H- s3 j - @Override
- }. [2 x5 }6 G) I- y* ]( U - protected AuthenticationInfo doGetAuthenticationInfo(
1 k- g% _$ p) W5 N& h6 B, x' z - AuthenticationToken authcToken) throws AuthenticationException {7 t5 M9 q1 P+ C1 y. t4 e
- UsernamePasswordToken token = (UsernamePasswordToken) authcToken;: ^4 p. O% E3 `# p
- String username=(String) token.getPrincipal();//用户名
* U) K$ Q# Y5 s) J' H - try {' B& b" E# Z" e) k0 B5 C3 P- }
- User user = userService.getUser(username);9 Q$ ^0 K& ]$ a. E4 Y, G1 Z2 p& L
- if (user != null) {
& H4 P# I T% W0 J - //获取session并保存到session中! H5 c0 X2 W+ ^" |
- Subject subject = SecurityUtils.getSubject();6 |) o& ^2 T u A; r) {
- //subject.login(authcToken);
O. l" f' t* g - organizeRole(user);//组织用户权限1 c8 j3 a, h5 i9 v1 b* {( B
- subject.getSession().setAttribute("user", user);
5 g+ H. p p# ] k$ J& S6 F - //如果身份认证验证成功,返回一个AuthenticationInfo实现;
9 ]$ m# { `& c- l% q; U9 Y' V - return new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(), getName()); ' j% }2 J L3 [# U8 N! b
- }
/ e7 w# R* ]- i( N5 X* r- [ - }catch (Exception e ) {* v- i5 Y; K s
- //系统异常
3 U& A8 K6 }" X - }
9 W8 v2 }8 a/ j) e& S4 Y) I# e - return null;( n) A2 E$ D' ^- \1 I! a- H: p
- }
9 T, P, t) R e2 o/ _; c5 | - /*6 W4 s3 P# R4 H4 c2 I1 M
- * 组织用户权限 这里默认使用配置 后期读取配置文件 或者数据库2 e7 o \6 ?* S
- */5 l( S6 z6 X1 }1 w' ?. o
- public void organizeRole(User user){6 U. u4 o8 Q+ Q2 D8 P/ y) e
- Short roleNum = user.getRole();
1 Q) z. b( C0 G9 G4 y5 t _0 f - if(roleNum==1){//管理员3 ~) e7 J8 k4 g$ K* a9 P- F' s
- List<Role> roleList = new ArrayList<Role>();! [) O% n# W- ]' p- O! f& l
- List<Permission> permissionList = new ArrayList<Permission>();, L0 A4 m$ P8 V. V5 e$ Z* y& \2 }0 H
- Permission permission = new Permission(1,"manager");
. L$ m/ i6 x2 ~) e) T* [ - permissionList.add(permission);; G! ^- B: r* {* w2 o% U2 A" M4 s
- Role role = new Role (1,"admin",permissionList);! E8 Y) n/ t& E' e* k+ l1 E, `
- roleList.add(role);- u) c( ~5 ^3 d9 r% N4 M
- user.setRoleList(roleList);. Z2 G/ g2 ^. I- i% Z
- }else{//普通用户
# a6 k( z4 B0 ^( R - List<Role> roleList = new ArrayList<Role>();6 t9 q. p) V2 P" \$ V+ ^6 N# F: {' ^* D
- List<Permission> permissionList = new ArrayList<Permission>();
7 ^5 d( ^0 \7 A - Permission permission = new Permission(1,"user");
. B4 B. d8 N t! O - permissionList.add(permission);8 l# e4 E0 n% K2 q9 O* x# s. I
- Role role = new Role (1,"user",permissionList);
! {1 R9 r4 J9 ~- G" N1 H - roleList.add(role);
5 E. N9 J$ V$ i/ Q- z2 q - user.setRoleList(roleList);
; z- g. g4 h4 @3 H6 Z - }
2 q6 E; [. b9 D. ~ - }
2 x& R3 w. F6 L# x) R1 Z9 u - }
复制代码 . U6 O% }3 u7 B8 H
由于每次权限验证都要重新组织 这里加入了ehcache缓存配置 加入 securityManager工厂即可$ E1 c: n4 M3 m" m
ehcache-shiro.xml:) j9 t6 P5 x3 R4 N$ h
- <ehcache updateCheck="false" name="shiroCache">
$ _. k* n0 Q3 u; ^) G) g - 3 {5 J9 J0 A# m$ o
- <defaultCache) g1 S2 u2 N# G# _# ~: O
- maxElementsInMemory="10000"" }8 I" G2 R$ b- C0 W2 D2 z
- eternal="false"
9 N1 X; Q: H+ r. L3 s" [( X - timeToIdleSeconds="120"
& b7 y" j y8 n' D0 X& |" g - timeToLiveSeconds="120"
( A4 A1 G! j* U) @* S* q+ [9 D- i ^ - overflowToDisk="false"
& n y0 W, D% I. ]- J# w - diskPersistent="false"
- o; a9 [0 O& `# f/ E$ k3 f - diskExpiryThreadIntervalSeconds="120"9 q- Y' X- I, [/ T3 n5 p5 s
- />/ T T( u8 K& d
- </ehcache>
复制代码 spring-mvc.xml配置:! s- ~ _8 j, f4 r
- <!-- 启用SpringMVC的注解功能,它会自动注册HandlerMapping、HandlerAdapter、ExceptionResolver的相关实例 -->1 z( z# d% h0 u+ W
- <mvc:annotation-driven/>
" A7 ?& e# T6 s, ?) r( ~1 b5 u - <!-- 自动扫描-->) N X' |4 [* O+ i. `, `% V9 c
- <context:component-scan base-package="com.*"/>
5 O; x+ |% r; S' v8 S3 X1 R; j+ e - <!-- 配置SpringMVC的视图解析器 httl视图 -->2 z6 \1 o. G* I
- <bean id="viewResolver" class="httl.web.springmvc.HttlViewResolver">
h) ]% E4 `: X* Q: L( p9 I - <property name="contentType" value="text/html; charset=UTF-8" />5 X! N4 N0 K/ z/ a3 m
- </bean>
, i D. G' T" Q, r* q; _ - 3 W6 ^2 ^$ y; B T! M4 G
- <!-- 在spring-mvc.xml配置文件添加Shiro Spring AOP权限注解的支持: -->
$ Z, E) x) _9 G8 X$ O- v - <aop:config proxy-target-class="true"></aop:config>3 i, r; u" z7 W5 A
- <bean
# ?2 t) I4 X7 U3 Q - class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">+ U3 a: a' I9 b. v8 h* Q& U
- <property name="securityManager" ref="securityManager" /># @1 g2 g8 K8 k" t
- </bean>: W* m" a; I+ M7 l# d8 A6 V
- <!-- 当前用户没有权限时跳转到的页面: -->
- M% }: R5 m, F - <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> 5 [- i, X# n+ G( M3 d: g6 z: \3 l' f& `
- <property name="exceptionMappings">
3 i* U) I' ^7 a! H# _ j+ @ I2 i - <props>
! {: z1 L% n L& K2 m - <prop key="org.apache.shiro.authz.UnauthorizedException">/users/unauthorizedView</prop> # ^- W1 h8 G) U) P6 J
- </props> ! m/ X, R* Q" r3 G8 N
- </property>
. C c& D4 G0 L0 U. E3 D - </bean>
复制代码 httl.properties 配置:- import.packages+=com.itstyle.web.controller, [: E" t+ g4 N, L& Q% i: d
- - ^" K; F$ o5 S$ q- P
- template.directory=/WEB-INF/templates //模板存放地址
2 B7 B, [; k2 z8 l. O1 }5 P
$ \ }. s. | Z7 J+ Y+ L- template.suffix=.httl
2 W/ D6 D$ q2 {. _7 s& K! e
5 y5 h9 t$ |% Q2 ?4 j4 Z- input.encoding=UTF-8
B# E- b8 B- P; p4 ^" W0 @ - 7 Q/ `0 G r, a; |: j, u: `
- output.encoding=UTF-8//编码
- v5 J# L6 Q$ U$ J* E0 P0 i" P! R - y. @4 {5 _4 }+ V/ E9 ^
- reloadable=true* e8 ^5 d, f5 K# y0 I4 [8 O% D) q6 }
- 2 {+ e1 g" u! u2 O) D
- precompiled=true
% W! u1 R; c3 Y+ R5 r G. F - $ J9 w8 T2 S( Y* g5 A: x7 w8 ]
- compiler=httl.spi.compilers.JavassistCompiler2 H5 _% t) x) S- L+ P% T: J# B
- import.methods+=com.itstyle.web.hiro.ShiroKit<span style="line-height: 1.5;">//前台导包类 主要判断权限</span>
复制代码 ! y g: i6 d5 E& G& U
$ |7 M. l0 v0 r
sping4Mvc+hibernate4+shiro+httl+maven整合项目源码
2 A) L* O& @3 t, W7 c; [" m( h5 G5 [
提取码:
下载地址.txt
(52 Bytes, 下载次数: 8, 售价: 10 IT币)
r5 \# g F& `6 F! k! L" v6 l. E" r
|
|