我的日常

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 项目源码 > sping4Mvc+hibernate4+shiro+httl+maven整合项目源码
总共48087条微博

动态微博

查看: 8614|回复: 10

sping4Mvc+hibernate4+shiro+httl+maven整合项目源码

[复制链接]
admin    

1244

主题

544

听众

1万

金钱

管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    跳转到指定楼层
    楼主
    发表于 2015-06-28 20:26:37 |只看该作者 |倒序浏览
            以上框架 可以说项目中基本都没有接触过除了hibernate、当然了那也是hibernate3。springMvc虽然接触过一点点 也是以前有时间做的小demo、根本不值一提。       & E1 Y, F8 |9 @

    3 A( c1 z8 c# ?. p% m2 [5 B       因为现在接触的大都是S2SH、所以有时候就不太想接触新的事物、主要感觉现在的已经不错了、没必要去改变什么。最近也是急需补充自己、当然也是为了技术储备、更深入的了解各个框架、以后也可以适应各个公司的不同需求做准备。               # J9 K) B. j# Q/ T" E+ @

    ' \0 b( p" I  L; f( G       Shiro 是 java 世界权限框架、以前听说过、但一直没有拿来实验、反正以前的后台权限基本为零或者乱七八糟的不好评论。
    9 L2 d  t8 ]& A/ k* q3 B% O* Q6 ~
    2 f% p9 A8 `; V5 t0 i# X
          这里说一下HTTL(以前根本没有听说过)、这里淘宝的一位大牛开发的框架、可谓是一款国产开源框架。HTTL(Hyper-Text Template Language)是一个高性能的开源JAVA模板引擎,适用于动态HTML页面输出,可替代JSP页面,指令和Velocity相似。
    + z2 {- d) U% I2 R* Q
    0 ^4 S; q3 s2 x下面主要是一些常识性的介绍 秒懂的童靴可以略过。

    + a) K! x' w4 P; n: X3 [8 b; m5 _3 l$ O
    1 B3 o4 p+ v" s& T
    一、hibernate3和hibernate4的区别:
      L8 R8 f/ {9 g: H- c, C# k' v1 y! T2 ^
    Spring3.1去掉了HibernateDaoSupport类。hibernate4需要通过getCurrentSession()获取session。并且设置( w: z1 ?* _7 Z+ I+ [# H
        <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>/ u0 o: ~' W4 {: ~+ y
        (在hibernate3的时候是thread和jta)。
    ! a( H8 k! d) t: h
    详细介绍http://www.52itstyle.top/thread-7344-1-1.html# Q' p1 P" V" ]# h$ ?7 G2 C5 E
    : Y2 B4 Q3 [: g
    二、Spring MVC和struts2的比较的优点:
    机制:spring mvc的入口是servlet,而struts2是filter(这里要指出,filter和servlet是不同的。以前认为filter是 servlet的一种特殊),这样就导致了二者的机制不同,这里就牵涉到servlet和filter的区别了。
    1 ]0 [- s) v8 n$ C8 l3 r' Y( d7 g
    详细介绍http://www.52itstyle.top/thread-7346-1-1.html) t/ u; e3 V' Z
    ! H, I0 \* L/ S  w: E9 d1 W$ ]
    # g6 L) ^0 {, p: K0 x: w# M
    二、HTTL详细介绍:$ v' P& ?' Y: ~! V1 R; z- i7 S
    将模板编译成JAVA字节码运行,并使用强类型推导,减少运行期反射和转型, 渲染速度接近Java硬编码输出,比Velocity等其它模板引擎快一个数量级。 比JSP也快,因为JSP只有Scriptlet是编译的,Tag和EL是解释执行的,而HTTL是全编译的。

    " j  B5 c! ?9 k( {* n详细介绍:http://www.oschina.net/p/httl8 O0 O" l" o/ N! Q, y
    github地址: http://httl.github.io/zh/design.html7 p% [8 [7 t9 Z( T, l

    " ?8 @/ A% ^3 b8 M# F% W( |1 D$ S
    0 T% _" r( ]3 r; F& `
    四、 shiro安全框架' A# D6 m6 `  U
    Shiro 是 JAVA 世界中新近出现的权限框架,较之 JAAS 和 Spring Security,Shiro 在保持强大功能的同时,还在简单性和灵活性方面拥有巨大优势。本文就带领读者一睹 Shiro 的风采。
    ( L+ K* S# G5 h, G% m  x' j# V
    详细介绍:http://blog.csdn.net/boonya/article/details/8233303* y. [# B$ G* G7 B
    跟我学Shiro目录:http://jinnianshilongnian.iteye.com/blog/2018398
    10分钟教会你简单的使用Shiro:http://www.52itstyle.top/thread-7366-1-1.html
    & P3 w: s' A& m" q=====================华丽的分割线===========================
    - c0 w, ?, |: W

    $ P& ~/ F0 _) H        好了 说了那么多、回到项目上来。搜遍全网也没有找到类似的可以参考的项目源码并且带jar包的、只是找了一个pom.xml以及相关配置、但是~没有源码。只能自己配置了。
    ; `+ s( W/ r2 ~4 v$ b) ]9 v" a  i) J& r" Q" z: f0 ?& E# F1 n
    # G, S' r3 z' ?) b2 B) l! _5 v
           既然拿到pom.xml文件就好说了、下面就是搭建maven项目并下载所需jar包。一般的开发工具都会自带maven、只需相应的配置即可。   
    ) n* _5 A; s8 ?7 a2 s, e
    参考(http://jingyan.baidu.com/article/ea24bc39b1a8c7da63b33159.html)
    & F4 @& J. I& V. y3 `% M

    / y* c0 G, Z& C" T/ V: v一、shiro基本配置

    ; [8 ^2 i, ]. V* B: _, B# F. i& g! w% ~* V0 \* d: I
    applicationContext-shiro.xml:
    ) i; D7 p/ [4 c5 H0 l0 _2 v/ C8 Z' u
    1. <!-- 自动扫描-->
      8 c/ ?, {6 w; c7 C
    2.     <context:component-scan base-package="com.*"/>9 J7 x: ^& o2 d7 q. v* S( X
    3.     <!-- 用户授权/认证信息Cache, 采用EhCache  缓存-->
      7 u: {- j9 d" O$ d- m' K# @6 s
    4.         <bean id="shiroEhcacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">" [' m5 {+ T3 x4 v1 f
    5.                 <property name="cacheManagerConfigFile" value="classpath:ehcache-shiro.xml"/>
      6 W: p' \$ _& \. c/ ?! x" B* Z3 J
    6.         </bean>9 h7 S$ x- ?1 N' E* f, G2 F
    7.     <!-- 继承自AuthorizingRealm的自定义Realm,即指定Shiro验证用户登录的类为自定义的UserRealm.java -->  X  H! ?6 w3 O! {: W' N
    8.     <bean id="shiroRealm" class="com.itstyle.web.realm.UserRealm"/>
      ; d) u- _( `; o% A
    9.     <!-- 基于Form表单的身份验证过滤器 -->
      2 J* A/ N) t' L: ^3 b6 i
    10.     <bean id="formAuthenticationFilter"- G, K, W  m- ?: R) N8 o
    11.         class="org.apache.shiro.web.filter.authc.FormAuthenticationFilter">( N5 ?- _$ U6 N3 h$ B9 r
    12.         <property name="usernameParam" value="username" />  l* [) i% d1 o; k. p
    13.         <property name="passwordParam" value="password" />$ o# J; b* @' G: ~9 l  Y
    14.         <property name="loginUrl" value="/users/index.html" />" o( Z0 ~7 N; |
    15.         <property name="successUrl" value="/index/index.html" />
      1 B" Z7 F" u5 n% I
    16.     </bean>, I. I1 Q6 X  G) g4 P) z
    17.     <bean& n% c+ F& M$ T2 p+ N) o- w! h
    18.         class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
      3 A. Q) Q/ Y% U" l1 k* h
    19.         depends-on="lifecycleBeanPostProcessor">+ r1 A+ [* v* k% C$ {
    20.         <property name="proxyTargetClass" value="true" />8 N: l* I+ x/ D9 n5 A2 b9 W, @
    21.     </bean>
      # o7 X6 _7 o0 \. J
    22.    
      ( k5 {; a' O4 D" |% y
    23.     <!-- securityManager工厂  这里主要是设置自定义的单Realm应用,若有多个Realm,可使用'realms'属性代替 -->
      $ t* H4 S  e! I7 R
    24.     <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
      ( ?. H* G# a* F/ z
    25.         <property name="realm" ref="shiroRealm" />
      , y0 {) o! o9 `
    26.         <property name="cacheManager" ref="shiroEhcacheManager" />
      9 W# Q0 y! _4 K8 v. c6 w% F: O6 V
    27.     </bean>0 q6 W; i5 g- e* M: r5 M4 W: G( b
    28.     <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">) j, X% |$ p. W0 @2 e+ G
    29.        <!-- 调用自定义的权限管理器 -->
        c3 R& a; @# u' \6 N8 I
    30.         <property name="securityManager" ref="securityManager" />
      0 Z  O4 z( p& |" Z
    31. 6 }3 u$ k5 e+ r0 O
    32.         <!-- 配置登陆成功后跳转地址 -->5 \3 k0 l" ]& v8 E8 K
    33.         <property name="successUrl" value="/index/index" />
      ; }  z/ s9 g; N' u6 P+ e5 n

    34. # [( P$ G4 @4 j3 B- ]2 f1 h
    35.         <!-- 配置登陆时请求的地址 -->
      7 @8 Y$ d4 U; h5 e. N/ v
    36.         <property name="loginUrl" value="/users/index" />, f  w! W1 v# k9 `- J7 O
    37.         % W, P" T0 f# `% P" F
    38. - W6 c3 v, U3 ~( K/ Z7 m- {; ?
    39.         <!-- 如果请求的资源不再你的权限范围内,则跳转到error.htm -->
      * H' S- v. b, q9 {$ c2 e
    40.         <property name="unauthorizedUrl" value="/users/noAuth" />
      4 {* _4 r6 y, H# d7 \' d

    41. % f9 U, s* P! t
    42.         <property name="filters">9 t7 i6 H4 d  b
    43.             <map>3 I& L8 f; f# s% F! W% [
    44.                 <entry key="authc" value-ref="formAuthenticationFilter"></entry>
      " N4 K) ~- t, Y& }! D: H9 X6 e
    45.             </map>/ S8 a/ r6 l5 d2 |, y& |3 w
    46.         </property>
      , E  I( w3 ^1 F
    47.         <property name="filterChainDefinitions">& z4 U, J) k! m
    48.             <value>
      9 m( f. i" U% _2 _6 l! a1 _% y( o
    49.                 <!-- anon表示此地址不需要任何权限即可访问 -->8 P1 k2 j1 p0 K0 r. H% F% T
    50.                 /users/*=anon% Z: O0 h6 Q1 \
    51.                 <!--login页面和logout页面不需要验证 --># _* d! b" |% h/ S4 S! g( ]
    52.                 /login* = anon
      5 f7 S& ], k: P) E5 z* o8 y. k
    53.                 <!--访问所有文件,authc必须通过验证后才能访问 -->
      & V0 n7 e4 N: v& e' F$ i
    54.                 /** = authc" K1 T" G$ m7 h. J
    55.             </value>8 O( ?4 ~: ^# U
    56.         </property>
      6 J3 W; t& H9 Y" E" ?$ d- P
    57.     </bean>0 r4 Z8 \4 x9 [/ T6 L0 W/ a4 r
    58.     <!-- 相当于调用SecurityUtils.setSecurityManager(securityManager) -->
      1 i, B) O* N/ r
    59.     <bean7 K8 O) ^9 Z7 {0 _9 v
    60.         class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">' C! y2 o( j2 d& o/ `
    61.         <property name="staticMethod"; ]& |' t) {. V& p- d
    62.             value="org.apache.shiro.SecurityUtils.setSecurityManager" />, i4 O9 p# f7 ^; v: A0 a9 z* T
    63.         <property name="arguments" ref="securityManager" />
      ! F( Z. o) D# G( b' x# F
    64.     </bean>" Q7 Y: X2 M2 r' h
    65.     <!-- Shiro生命周期处理器 -->' J5 o. I8 z; S0 s) F) U- z5 e, _+ Z8 l4 O
    66.     <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />
    复制代码

    7 K1 @! m+ q7 u- f- oUserRealm.java:
      G, V& ?8 z9 y: d' d" ]
    1. /**) F: ]9 u9 X6 u% _6 P4 z9 m: k
    2. * 几个概念: 翻译不好,从官方上找来的原文. 如果不懂请 使用 “有道词典”。来源于: http://shiro.apache.org/java-authentication-guide.html
      , T: @; ?: z$ X
    3. *
      5 C* G) T! F6 g0 e: q2 U
    4. * Subject                 Security specific user 'view' of an application user. It can be a human being, a third-party process, & s4 _' b: ~, W/ z# a* Y
    5. *                                         a server connecting to you application application, or even a cron job. Basically, it is anything or 6 A7 p6 B7 N0 n( E! `# |) p. @& K
    6. *                                         anyone communicating with your application.; W6 g- e" _0 Z  _
    7. * ' r1 L* C5 I- F" c2 I
    8. * Principals        A subjects identifying attributes. First name, last name, social security number, username
      & a: w/ R) u* y, d6 S
    9. *
      ( w# x0 d! k" M5 E% h. i* K" }! ?
    10. * Credentials        secret data that are used to verify identities. Passwords, Biometric data, x509 certificates,6 L& [* f8 r, G0 @2 A: J4 t
    11. * ! [8 d" Y+ G6 o4 h: |  `
    12. * Realms                Security specific DAO, data access object, software component that talkts to a backend data source.
      3 m3 M( p* R& J! `( l. }
    13. *                                 If you have usernames and password in LDAP, then you would have an LDAP Realm that would communicate 9 K, `2 x2 v4 ]& A2 I1 `
    14. *                                 with LDAP. The idea is that you would use a realm per back-end data source and Shiro would know how
      * T1 R* G; a7 m9 ^
    15. *                                 to coordinate with these realms together to do what you have to do.
      ) e& j8 W; Y/ s* R; ?" N
    16. *, _' B1 D; U6 n9 a' B' |
    17. *// M: I; H  a$ O# l: [
    18. public class UserRealm extends AuthorizingRealm {
      4 ^+ H' E+ `$ e2 M
    19.         @Resource
      3 y  ?7 u# d+ s/ I" ~
    20.     private IUserService userService;3 @5 j4 ]* @1 \
    21.     - o* X% X- J! X: l7 [7 `8 R  Z/ m
    22.          /*7 _8 Q6 `6 ~( F' L8 a5 l
    23.      * 权限认证
      . {& `$ A0 w; E6 M' G) e
    24.      */
      " d6 L: [% R4 ?; _( y) z) C8 o  i
    25.     @Override! X  \  r$ C$ V4 s, e4 S
    26.     protected AuthorizationInfo doGetAuthorizationInfo(
      . B+ N  o$ j3 @# z0 w3 c- d  a) J
    27.             PrincipalCollection principals) {0 ]& x0 t$ E( p* K6 A: y) x
    28.         SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
      / |4 ^# J: b" S4 }" `6 j: n, ^
    29.         List<String> roles = new ArrayList<String>();  3 I; F. u! w0 P1 P  ?- c& u
    30.                 List<String> permissions = new ArrayList<String>();2 I# c' |4 g. K
    31.                 System.out.println("由于加入了缓存, 此处只会load一次 ");) H$ @% E+ n# \$ a
    32.                 try {
      . ^- S8 v& C+ |7 v$ m
    33.                         Subject subject = SecurityUtils.getSubject();, I. Q) e9 o2 w' [1 K
    34.                         User user =  (User) subject.getSession().getAttribute("user");+ Y1 p6 u  z" S+ m
    35.                         if(user!=null){
      ) V1 E; x3 Z* @4 ^* L% l
    36.                                 if(user != null){
      ) P- m4 Q5 Y4 M) Q/ [
    37.                                         List<Role> roleList = user.getRoleList();5 Q8 u1 t0 P5 M
    38.                                         if (!roleList.isEmpty()) {, ?+ n+ |2 }1 z# H; q
    39.                                                 for (Role role : roleList) {9 |0 X2 `2 G# I3 e4 J2 o
    40.                                                         roles.add(role.getRolename());. S" I$ p% h. i- S0 b' ^9 T2 e
    41.                                                         List<Permission> prmissionList = role.getPermissionList();" _6 ?- `/ f- f7 Z! U! d( L
    42.                                                         if (!prmissionList.isEmpty()) {8 B9 S( d, E9 [" H0 q% L
    43.                                                                 for (Permission pmss : prmissionList) {
      ( i6 h+ o% D9 D1 [! T
    44.                                                                         if(!StringUtils.isEmpty(pmss.getPermissionname())){6 }4 n6 u6 }8 V2 n7 A% v: E% f  P
    45.                                                                                 permissions.add(pmss.getPermissionname());
      4 \' Z! m) ]7 a6 Z4 ?- d
    46.                                                                         }& A! M- l) J- t4 g3 m
    47.                                                                 }0 M6 z( M% m; V8 w
    48.                                                         }
      , }& V+ t  z) _7 n# D% W: y
    49.                                                 }
      6 [: ^1 D8 D8 x3 T9 i6 m! H- ?
    50.                                         }: j  w! _1 G0 L. _
    51.                                         //给当前用户设置角色
      $ z# j0 d# ^& }* m5 @' y# n# l
    52.                                         info.addRoles(roles);2 G4 G; [! ]$ A
    53.                                         //给当前用户设置权限2 s, e& h" C  n/ P  Z
    54.                                         info.addStringPermissions(permissions);* S) B' E9 e( h6 s( L, s- S& B+ `
    55.                                 }else{
      . Y- o3 X0 T0 l2 Y
    56.                                         throw new AuthorizationException();5 q4 u8 O8 I1 A5 Q$ Z1 j
    57.                                 }
      ; `. e: U; z( D
    58.                         }- G4 t- A/ L8 P) D- A9 x
    59.                 } catch (Exception e) {: G6 ~/ B* x5 {
    60.                         e.printStackTrace();
      8 Y  `9 M9 v: ?0 O( z
    61.                 }
      % u( H8 ?- J/ U/ i0 d' T
    62.                 return info;
      : F- V0 @- l* \! d. a* f
    63.     }
      , d: D, h7 x8 Q3 d, Y3 A
    64.     /*
      * P& d; P1 N) T5 S3 t5 J! j
    65.      * 登陆认证
      - m, }, I) r/ Y( o- j
    66.      */" K# f. a9 K7 A# n; `* F; H4 q8 ^
    67.     @Override% r+ G, N- ?# H' d* D
    68.     protected AuthenticationInfo doGetAuthenticationInfo(
      0 Z3 ~4 ]7 N6 t) L- A3 ]
    69.             AuthenticationToken authcToken) throws AuthenticationException {
      9 f' B) B4 A0 Z$ K( U
    70.         UsernamePasswordToken token = (UsernamePasswordToken) authcToken;9 N4 }# w& a4 S- A  X
    71.         String username=(String) token.getPrincipal();//用户名 ; v1 V& R0 I& T6 c* E0 N
    72.                 try {+ p. _/ j# |3 c3 M* t
    73.                         User user = userService.getUser(username);
      * j9 h- v4 T' {7 \* l
    74.                         if (user != null) {; q' H/ n/ \, N5 u! ?
    75.                                  //获取session并保存到session中
      5 L* U- C: ^$ k/ x$ C0 u, }# S
    76.                                  Subject subject = SecurityUtils.getSubject();
      ! X. E% x) l) c
    77.                                  //subject.login(authcToken);- T9 r7 O7 S* l) ]( u$ ~; S
    78.                                  organizeRole(user);//组织用户权限4 D9 j7 \: U" A5 ]
    79.                                  subject.getSession().setAttribute("user", user);
      9 |! X: V# ~0 J9 e9 I" Y3 `
    80.                         //如果身份认证验证成功,返回一个AuthenticationInfo实现;    C) l9 \8 _% \( e* n1 F
    81.                         return new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(), getName());
      ; p2 l# T+ q  c7 R9 z$ H" h
    82.                         }
      , p8 P4 W2 @4 w& P
    83.                   }catch (Exception e ) {
        B2 w& B8 l! h; \5 c& B1 `9 R
    84.                         //系统异常
      % T/ y+ n% V+ T' G9 J! z+ R# F
    85.                 }
      - A! @9 v8 U! P# K$ l. \: m
    86.                 return null;: B" H: l/ a+ ^+ M0 H
    87.     }
      ! a$ @6 M5 a6 N  f9 F2 _
    88.     /*
      . Z$ {  ~  P! E1 F. u* J8 i# L
    89.      * 组织用户权限 这里默认使用配置 后期读取配置文件 或者数据库
      + F( A- D5 @0 P! L; X
    90.      */2 ]! o- B. _" j6 Q: [' T+ w
    91.     public void  organizeRole(User user){  T8 `5 R& ~, L2 R+ d- c6 h
    92.                Short roleNum  = user.getRole();7 ~( j# }; d8 L& R
    93.                if(roleNum==1){//管理员
      ) `2 Y5 K( V$ j6 G. m( ^9 M/ t
    94.                        List<Role> roleList = new ArrayList<Role>();
      - w" ^# _& p8 u. W& a" \# C
    95.                        List<Permission> permissionList = new ArrayList<Permission>();9 w  M. P, o! o8 w* c: G
    96.                        Permission permission = new Permission(1,"manager");
      , u% N5 r) ~1 p, C- y& G! E
    97.                        permissionList.add(permission);! g( V1 ]9 j+ S4 {
    98.                        Role role = new Role (1,"admin",permissionList);( D' z& W2 U6 h2 W6 h8 |, J+ o
    99.                        roleList.add(role);
      0 u" s* ?, S# w/ v7 [; y
    100.                        user.setRoleList(roleList);) O3 d/ L8 C, Z, g( g
    101.                }else{//普通用户9 ~8 @& S; z& \
    102.                        List<Role> roleList = new ArrayList<Role>();  j6 Q/ I) w) I! s( d
    103.                        List<Permission> permissionList = new ArrayList<Permission>();
      2 ~3 g, Z, u" f8 F
    104.                        Permission permission = new Permission(1,"user");
      ( Z* \1 B( [! r5 h+ z9 ]% p
    105.                        permissionList.add(permission);2 k9 f5 E9 c6 R4 N; O
    106.                        Role role = new Role (1,"user",permissionList);
      8 u5 J% k7 z  y+ I; _/ w
    107.                        roleList.add(role);
      * J# W/ U' M( B, I  t) i  _) H
    108.                        user.setRoleList(roleList);
      ' }# U5 y& Q, |" Q7 f
    109.                }
      6 @, i8 A8 u0 Y2 _
    110.     }, |- R! R8 G  u( i/ V7 j0 \
    111. }
    复制代码

    " y; E+ C; \' d1 E9 J# S0 f: J由于每次权限验证都要重新组织 这里加入了ehcache缓存配置  加入 securityManager工厂即可
    + y8 V+ _6 j" Q# z/ i5 Qehcache-shiro.xml:% p" m% ]- Y. n  I8 n
    1. <ehcache updateCheck="false" name="shiroCache">7 z& o2 q1 p3 p

    2. + g: Q: v2 S- [3 V7 H9 @1 w% U
    3.     <defaultCache
      . O, m7 U' ]# z$ ~( O
    4.             maxElementsInMemory="10000"
      ( |* w% a5 o" m
    5.             eternal="false"9 d3 |$ s: |/ \' R: \% W
    6.             timeToIdleSeconds="120"
      7 f, Z0 z5 k5 a% e1 X( Y  S
    7.             timeToLiveSeconds="120"* X, ^7 ~5 S) C+ m* X* Y/ P: J
    8.             overflowToDisk="false"
      : F1 h/ w) H. V8 v1 |- r
    9.             diskPersistent="false"
      ( r- A' y& P" k
    10.             diskExpiryThreadIntervalSeconds="120"
      9 J% N% }4 w0 B1 p% W2 h; I. W
    11.             />
      / c. i$ A( s4 a) d; P. e
    12. </ehcache>
    复制代码
    spring-mvc.xml配置:$ Q' i: L# K" m' a
    1. <!-- 启用SpringMVC的注解功能,它会自动注册HandlerMapping、HandlerAdapter、ExceptionResolver的相关实例 -->
      / _8 K; X$ D5 i2 d  L% h
    2.     <mvc:annotation-driven/>% }2 ]5 L6 A# l8 _& i, h
    3.     <!-- 自动扫描-->
      6 _& i1 Y$ M+ \& b& _) L. j) w/ Z
    4.     <context:component-scan base-package="com.*"/>
      $ Q: S4 B2 [. d( Y. a
    5.     <!-- 配置SpringMVC的视图解析器 httl视图 -->! Z# h  H: X; n% @7 B& ]
    6.     <bean id="viewResolver" class="httl.web.springmvc.HttlViewResolver">
      ( y4 Y/ o: j" ^6 `) B! P- e$ P8 v
    7.         <property name="contentType" value="text/html; charset=UTF-8" />% X* _2 x; V+ ~3 O# o
    8.     </bean>0 a/ V. w: |5 B; I

    9. : M7 y% P& J5 h( y. S4 E
    10.     <!-- 在spring-mvc.xml配置文件添加Shiro Spring AOP权限注解的支持: -->
      8 b' U8 T! j  ~5 y0 @
    11.     <aop:config proxy-target-class="true"></aop:config>
      ! P, E2 M6 P- u$ P6 d% ^
    12.     <bean$ U; ]/ F/ B1 M8 w( l& y9 l% k$ h
    13.         class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
      0 o$ |7 d/ x0 p/ S6 l0 b1 r% v' k6 K
    14.         <property name="securityManager" ref="securityManager" />" q2 g- [/ y" n: c) s
    15.     </bean>* g# k  Y: P, `  W4 |! p
    16.     <!-- 当前用户没有权限时跳转到的页面: -->
      % \( e% H# l0 Q( Y' _9 w* @, A
    17.     <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">    6 B1 D7 |& ?3 H% O! ^( M/ l
    18.         <property name="exceptionMappings">   
      9 T6 J$ C; ^. q  u9 ^
    19.             <props>   
      0 A2 H0 R7 m% I/ b7 k1 L( z9 B
    20.                 <prop key="org.apache.shiro.authz.UnauthorizedException">/users/unauthorizedView</prop>  
      4 K9 W& H& x% d$ T/ C9 X
    21.             </props>    " f2 {. U4 i- _/ d6 D3 l
    22.         </property>      F) @5 y/ q2 U, o  o4 R; Q% P6 f
    23.     </bean>
    复制代码
    httl.properties 配置:
    1. import.packages+=com.itstyle.web.controller" q5 s: w- m$ w! H: G" e" X; N
    2. 9 V  U) L& g' q+ @' m, L
    3. template.directory=/WEB-INF/templates  //模板存放地址( p1 b5 U5 S+ Y* U) s0 C  [

    4. 9 q9 N- L9 W6 b. R' C8 C2 v2 I/ o
    5. template.suffix=.httl
      , T. K* y9 B6 E: M1 V

    6. " f2 i4 W6 B; \1 D+ N2 P$ M5 B
    7. input.encoding=UTF-8
      & t; b# |$ ]) d$ e, x7 R
    8. 2 N) I1 Y: e5 D6 B, M: ^, l
    9. output.encoding=UTF-8//编码
      # O9 P4 l! g5 g! M" j: |
    10. 2 H# P" P, a6 d  R1 W% K$ F
    11. reloadable=true& y  j; J! b$ W0 z
    12. 4 \" \8 c1 `/ y% e5 E& b
    13. precompiled=true' W0 M3 e( k4 o" N0 X4 ?$ [

    14. 2 @* V' D- |0 s! g( b
    15. compiler=httl.spi.compilers.JavassistCompiler
      3 ?% ?% B: T3 Z
    16. import.methods+=com.itstyle.web.hiro.ShiroKit<span style="line-height: 1.5;">//前台导包类 主要判断权限</span>
    复制代码

    & g. V0 D) O: {+ R5 f& U) q9 f  g, Q
    sping4Mvc+hibernate4+shiro+httl+maven整合项目源码
    8 ]( H9 f/ i* g. D/ a6 O- @3 w# I2 Q# G. H
    提取码: 下载地址.txt (52 Bytes, 下载次数: 8, 售价: 10 IT币) 4 |% G0 e7 O* f9 E; Q
    6 C) a: g" @: |: w+ [) ^2 D# b

    科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、科帮网管理员和版主有权不事先通知发贴者而删除本文


    JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

    红红火火恍恍惚惚
    admin    

    1244

    主题

    544

    听众

    1万

    金钱

    管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    沙发
    发表于 2015-06-29 21:37:50 |只看该作者
    顶!d=====( ̄▽ ̄*)b
    回复

    使用道具 举报

    7

    主题

    3

    听众

    383

    金钱

    版主

    该用户从未签到

    板凳
    发表于 2015-07-01 11:32:00 |只看该作者
    看起来很牛逼的样子 demo呢?
    回复

    使用道具 举报

    1

    主题

    0

    听众

    92

    金钱

    三袋弟子

    该用户从未签到

    地板
    发表于 2015-07-31 08:51:56 |只看该作者
    学习学习,重新捡起来
    回复

    使用道具 举报

    7

    主题

    0

    听众

    213

    金钱

    三袋弟子

  • TA的每日心情

    2020-4-12 11:13
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    5#
    发表于 2015-08-07 11:06:43 |只看该作者
    好牛逼啊。厉害。厉害
    回复

    使用道具 举报

    4

    主题

    0

    听众

    92

    金钱

    三袋弟子

    该用户从未签到

    6#
    发表于 2016-03-10 11:29:44 |只看该作者
    厉害啊,才接触,学习学习!
    回复

    使用道具 举报

    woniu 实名认证   

    2

    主题

    0

    听众

    330

    金钱

    四袋长老

    该用户从未签到

    7#
    发表于 2016-04-12 12:02:26 |只看该作者
    这个项目太棒勒!下下来学习下!
    回复

    使用道具 举报

    2

    主题

    0

    听众

    289

    金钱

    五袋长老

    该用户从未签到

    8#
    发表于 2016-05-05 15:50:58 |只看该作者
    资源不错,谢谢楼主分享!
    回复

    使用道具 举报

    2

    主题

    0

    听众

    289

    金钱

    五袋长老

    该用户从未签到

    9#
    发表于 2016-05-05 15:51:31 |只看该作者

    ; |9 B) @) q  v; F0 {% d; D9 J: W2 ?. m厉害啊,才接触,学习学习!
    回复

    使用道具 举报

    14

    主题

    1

    听众

    284

    金钱

    三袋弟子

    该用户从未签到

    10#
    发表于 2016-08-05 11:42:27 |只看该作者
    谢谢楼主分享
    回复

    使用道具 举报

    快速回复
    您需要登录后才可以回帖 登录 | 立即注册

       

    关闭

    站长推荐上一条 /1 下一条

    发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
    快速回复 返回顶部 返回列表