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