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