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