Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Öи߼¶³ÌÐòÔ±±Ø¿´Ö®shiro¿ò¼ÜÓ¦ÓÃ
 
  2070  次浏览      27
2020-7-6
 
±à¼­ÍƼö:
±¾ÎÄÊ×Ïȼòµ¥½éÉÜ shiro µÄ×÷Ó㬽ÓÏÂÀ´¾ÍÖ±½Ó½øÈë shiro ÊÚȨµÄÈëÃÅ£¬²¢ÇÒÔËÓÃshiro Ô´Âë½éÉÜÁËshiroµÄʹÓã¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£


±¾ÎÄÀ´×ÔÓÚ´«ÖDz¥¿Í¹Ù·½²©¿Í£¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼­¡¢ÍƼö¡£

Ò»¡¢Shiro ¼ò½é

Apache Shiro ÊÇÒ»¸öÇ¿´óÇÒÒ×ÓÃµÄ Java °²È«¿ò¼Ü,Ö´ÐÐÉí·ÝÑéÖ¤¡¢ÊÚȨ¡¢ÃÜÂëºÍ»á»°¹ÜÀí¡£Ê¹Óà Shiro µÄÒ×ÓÚÀí½âµÄ API,Äú¿ÉÒÔ¿ìËÙ¡¢ÇáËɵػñµÃÈκÎÓ¦ÓóÌÐò,´Ó×îСµÄÒÆ¶¯Ó¦ÓóÌÐòµ½×î´óµÄÍøÂçºÍÆóÒµÓ¦ÓóÌÐò¡£

¶þ¡¢Shiro ÊÚȨÈëÃÅ

¼òµ¥½éÉÜÍê±Ï shiro µÄ×÷Óú󣬽ÓÏÂÀ´ÎÒÃǾÍÖ±½Ó½øÈë shiro ÊÚȨµÄÈëÃÅ£¬ÓÉÓÚÎÒÃÇѧϰ shiro ÖØµãÊÇÔÚʹÓã¬ËùÒÔÎÒÃÇÉæ¼°µ½ shiro Ô´ÂëµÄ²¿·ÖÎÒÃǾͲ»×ö¹ý¶àµÄ¹Ø×¢¡£

2.1:Ê×ÏÈÎÒÃÇÐèÒª´´½¨Ò»¸ö maven µÄ web ÏîÄ¿£¬µ¼Èë shiro Ïà¹ØµÄÒÀÀµ°üºÍ tomcat ÒÔ¼° jdk µÄ±àÒë²å¼þ£¬±¾´ÎÎÒÃÇʹÓà shiro ×îеÄÒÀÀµ°ü¡£

´ó¼ÒÒ²¿ÉÒÔÖ±½Ó´Ó maven µÄÖÐÑë²Ö¿âÕÒ×ø±ê

<groupId>cn.itcast</groupId>
<artifactId>shiro_quickStart</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-web</artifactId>
<version>1.4.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>8989</port>
<path>/</path>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
</plugins>

2.2 ÔÚÏîÄ¿µÄ WEB-INF ÏÂÈ¥´´½¨Ò»¸ö shiro µÄÅäÖÃÎļþ shiro.ini£¬Í¬Ê±ÐèÒªÔÚ web.xml ÖÐÅäÖà shiro ºËÐĵĹýÂËÆ÷£»

2.2.1 web.xml ÖкËÐĹýÂËÆ÷ÅäÖÃ

<listener>
<listener-class>org.apache.shiro.web.env.
EnvironmentLoaderListener
</listener-class>
</listener>
<filter>
<filter-name>ShiroFilter</filter-name>
<filter-class>org.apache.shiro.web.servlet.ShiroFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>ShiroFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>

2.2.2 shiro.ini ÅäÖÃÈÏÖ¤

¼òµ¥½âÊÍһϣ¬users ÊÇÓÃÀ´ÅäÖÃÓû§ÃûºÍÃÜÂëµÄ,urls ÊÇÓÃÀ´ÅäÖÃÈÏÖ¤¡£/admin/**=authc ±íʾ·ÃÎÊÏîÄ¿ admin ÏÂÃæµÄËùÓÐ×ÊÔ´¶¼ÐèÒªµÇ¼ÈÏÖ¤£¬¶ø/login /login.jsp ±íʾ·ÃÎÊÕâ 2 ¸ö×ÊÔ´²»ÐèÒªµÇ¼ÈÏÖ¤£»

[main]
[users] user=user admin=admin
[urls]
/admin/**=authc
/login=anon
/login.jsp=anon

2.2.3 ±àд LoginServlet ºÍ login.jsp

* ÔÚ pom.xml ÖÐÒýÈë Servlet ºÍ Jsp µÄÒÀÀµ°ü
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency> <dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
* ´´½¨ LoginServlet ºÍ login.jsp

´´½¨ LoginServlet ºÍ login.jsp

*Æô¶¯²âÊÔ£º

µ±ÎÒÃÇ·ÃÎÊ //localhost:8989/admin/aa£¬ÓÉÓÚÐèÒªµÇ¼ÈÏÖ¤£¬ËùÒÔÌø×ªµ½Á˵ÇÂ¼Ò³Ãæ£»

Èý¡¢Shiro ÈëÃÅÅäÖÃϸ½Ú

ÉÏÒ»½²µ±ÎÒÃÇ·ÃÎÊ//localhost:8989/admin/aa£¬ÓÉÓÚ·ÃÎʵÄ×ÊÔ´ÐèÒªµÇ¼ÈÏÖ¤Ìø×ªµ½ÁË login.jsp£»ÎªÊ²Ã´Ìø×ªµ½ login.jsp Ò³ÃæÁËÄØ?

Ô­ÒòÊÇ shiro ʹÓÃÁËһЩÄÚÖõĹýÂËÆ÷£»

ÎÒÃÇ¿ÉÒÔͨ¹ý²éÔÄ

Ô´Â룬·¢ÏÖÈç¹ûûÓеǼ£¬×Ô¶¯Ìø×ªµ½ login.jsp

3.1 ÈçºÎÈ¥ÅäÖõÇÂ¼Ò³Ãæ£»

3.2 ÈçºÎÈà shiro Íê³ÉµÇ¼ÈÏÖ¤£¨ÅжÏÒ³Ãæ´«ÈëµÄÓû§ÃûÃÜÂëÊÇÕýÈ·µÄ£©

3.2.2 ÐÞ¸Ä login.jsp£¬¼ÓÈë±íµ¥£¬ÒѾ­±íµ¥Ìá½»µÄµØÖ·

3.2.3 ÔÚ LoginServlet Íê³ÉµÇ¼ÈÏÖ¤

ËÄ¡¢Shiro ÊÚȨÈëÃÅ

Shiro ³ýÁË¿ÉÒÔÍê³ÉÈÏÖ¤Í⣬Ҳ¿ÉÒÔ½øÐÐÊÚȨ£¬¼´µÇ¼Óû§Ö»ÓÐÓµÓÐÖ¸¶¨µÄ½ÇÉ«²ÅÄÜ·ÃÎÊÖ¸¶¨µÄ×ÊÔ´£»

4.1 ÐÞ¸Ä shiro.ini Îļþ£¬¼ÓÈë½ÇÉ«¼°ÊÚȨ¡£

4.2 [roles]ÖпÉÒÔÅäÖÃϵͳÖеĽÇÉ«£¬´Ë´¦ÎÒÃǶ¨ÒåÁË 2 ¸ö½ÇÉ«£¬Ò»¸ö½ÇɫΪ ROLE_USER,Ò»¸öΪ ROLE_ADMIN

4.3[users]ÖгýÁË¿ÉÒÔÅäÖõǼµÄÓû§Í⣬»¹¿ÉÒÔ¸øÓû§·ÖÅä½ÇÉ«¡£´Ë´¦ÎÒÃǶ¨Òå user Óû§µÄ½ÇɫΪ ROLE_USER,admin Óû§µÄ½ÇɫΪROLE_ADMIN;

4. 4[urls]ÖгýÁË¿ÉÒÔÅäÖÃ×ÊÔ´·ÃÎÊÊÇ·ñÐèÒªµÇ¼ÈÏÖ¤£¬»¹¿ÉÒÔÅäÖõǼÓû§·ÃÎÊ×ÊÔ´ÐèÒªÄÄЩ½ÇÉ«¡£´Ë´¦ÎÒÃǶ¨Òå·ÃÎÊ/admin ÏÂÃæµÄËùÓÐ×ÊÔ´£¬³ýÁËÐèÒªµÇ¼£¬µÇ¼Óû§»¹ÐèÒªÓÐ ROLE_USER ½ÇÉ«£»

4.5 ²âÊÔÎÒÃÇ·¢ÏÖÈç¹ûʹÓà user/user Óû§ÃûºÍÃÜÂë½øÐеǼ£¬µÇ¼³É¹¦ºó¿ÉÒÔ·ÃÎʵ½/admin/add.jsp

¶øÈç¹ûʹÓà admin/admin Óû§ÃûºÍÃÜÂë½øÐеǼµÇ¼³É¹¦ºó³öÏÖ 401 µÄ´íÎó£»

Îå¡¢Shiro ÈÏÖ¤Á÷³ÌºÍ×Ô¶¨Òå Realm

5.1 ǰ 2 ¸öÕ½ÚÎÒÃÇÒѾ­½²½âÍê±Ï£¬ÈÏÖ¤ºÍÊÚȨµÄÈëÃÅ£¬½ÓÏÂÀ´ÎÒÃǽ²½âÈÏÖ¤Á÷³Ì£»Ê×ÏÈÎÒÃÇÏÈÀ´¿´Ò»ÕÅͼ£¬ÊÚȨÁ÷³Ìͼ

Á÷³Ì£º

1¡¢µ±ÎÒÃǵ÷Óà Subject.login(token)½øÐеǼ£¬Ëû»á»á×Ô½« token ½»Óɸø Security Manager£¬ËùÒÔÎÒÃÇÐèÒªÔÚµ÷Óà login ֮ǰ£¬ÔÚ

SecurityUtils. setSecurityManager()ÉèÖÃ Security Manager£»

2.SecurityManager Ëû»áµ÷Óà Authenticator ½øÐÐÓû§ÃûºÍÃÜÂëµÄÈÏÖ¤£»

3¡¢Authenticator ²ÅÊÇÕæÕýµÄÉí·ÝÑéÖ¤Õߣ¬Authenticator »á°ÑÏàÓ¦µÄ token ´«Èë Realm£¬´Ó Realm »ñÈ¡Éí·ÝÑéÖ¤ÐÅÏ¢£¬Èç¹ûûÓзµ»Ø/ Å׳öÒì³£±íʾÈÏ֤ʧ°ÜÁË¡£

¶ÔÓÚ¿ª·¢ÕßÀ´Ëµ£»SecurityManager ºÍ Authenticator ¶¼ÓÉ shiro ¿ª·¢ºÃÁË£¬µ±È»ËûÒ²ÌṩÁË×Ô¼ºÌṩµÄһЩ Realm À´»ñÈ¡Óû§ÃûºÍÃÜÂ룻

ĬÈÏÇé¿öÏ shiro ʹÓõÄÊÇ initRealm(shiro.ini ÅäÖÃÎļþÖÐÅäÖõÄÓû§ÃûºÍÃÜÂë)½øÐÐͬ»§ÃûºÍÃÜÂëµÄ»ñÈ¡£¬ÎÒÃÇÒ²¿ÉÒÔ×Ô¼º¶¨Òå Realm À´»ñÈ¡

Óû§ÃûºÍÃÜÂëÍê³ÉÈÏÖ¤£»

5.2£º×Ô¶¨Òå Realm

package cn.itcast.realm;
import org.apache.shiro.authc.*; import org.apache.shiro.realm.Realm;
public class StaticRealm implements Realm {
@Override
public String getName() {
//Ö¸¶¨RealmµÄÃû³Æ
return "staticRealm";
}
@Override
public boolean supports(AuthenticationToken token) {
//¸ÃRealmÖ§³ÖµÄTokenÀàÐÍ
return token instanceof UsernamePasswordToken;
}
@Override
public AuthenticationInfo getAuthenticationInfo(AuthenticationToken token) throws
AuthenticationException {
//»ñÈ¡tokenÖеÄÓû§ÃûºÍÃÜÂë
String username = String.valueOf(token.getPrincipal());
String password = new String((char[]) token.getCredentials());
//Èç¹ûÓû§ÃûÃÜÂë²»ÊÇgang/123Å׳öÒì³££¬ÈÏ֤ʧ°Ü
if(!username.equals("gang") || !password.equals("123")) { throw new AuthenticationException("Óû§Ãû»òÕßÃÜÂëÓÐÎó");
}
return new SimpleAuthenticationInfo(username,password,getName());
}
}

5.3 ÔÚ shiro.ini ÖÐÅäÖÃ×Ô¶¨ÒåµÄ Realm

5.4 ²âÊÔ×Ô¶¨Òå Realm

¾­¹ý²âÊÔÎÒÃÇ·¢ÏÖÔ­À´µÄ iniRealm ¾Í²»ÔÙÆð×÷Óã¬Æð×÷ÓõľÍÊÇÎÒÃÇ×Ô¶¨ÒåµÄ Realm¡£

5.5 ÎÒÃÇÔÚ¶¨Òå Realm µÄʱºò³ýÁË¿ÉÒÔʵÏÖ Realm ½Ó¿ÚҲʹÓÃËüÒѾ­ÊµÏÖµÄһЩÀࣻRealm µÄÌåϵ½á¹¹ÈçÏ£»

ÆäÖÐ JdbcRealm ¿ÉÒÔÍê³É»ùÓÚÊý¾Ý¿âµÄÈÏÖ¤£»

5.6¡¢Ê¹Óà JdbcRealm À´Íê³É»ùÓÚÊý¾Ý¿âµÄÈÏÖ¤£»

5.6.1 µ¼Èë MySQL Çý¶¯¼°Á¬½Ó³ØµÄÒÀÀµ°ü£¬ÎÒÃDZ¾´ÎʹÓà Druid Á¬½Ó³Ø

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.14</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version>
</dependency>

5.6.2 ÔÚ mysql Öд´½¨ 2 ÕÅÊý¾Ý¿â±í¡¢

±í½á¹¹±ØÐëºÍ JdbcRealm Öз¢ËÍ SQL Óï¾äµÄ±í½á¹¹Ò»Ö£»

±í 1£ºÓû§±í¡¢ÓÃÀ´´æ´¢Óû§ÃûºÍÃÜÂë

±í 2£º½ÇÉ«±í¡¢ÓÃÀ´´æ´¢Óû§µÄ½ÇÉ«ÐÅÏ¢

5.6.3 ÔÚ shiro.ini ÖÐÅäÖÃ JdbcRealm

5.6.4£º²âÊÔ

Áù¡¢Shiro ÊÚȨÁ÷³Ì

6.1 ÉÏÒ»½²ÎÒÃǸø´ó¼Ò½²½âÁË Shiro ÈÏÖ¤µÄÁ÷³Ì£¬Ö÷Òª¾ÍÊÇÈçºÎ×Ô¶¨Òå Realm£¬½ÓÏÂÀ´ÎÒÃÇÒª½²½âµÄ¾ÍÊÇÊÚȨ£»Ê×ÏÈÎÒÃÇ¿´Ò»ÕÅͼÊÚȨÁ÷³Ìͼ

Á÷³ÌÈçÏ£º

1.Ê×Ïȵ±ÎÒÃÇÈ¥µ÷Óà Subject.isPermitted*/hasRole*£¬Ëû»áµ÷Óà SecurityManager£¬¶ø SecurityManager ½Ó×Å»áµ÷Óà Authorizer ÊÚȨ¹ÜÀíÆ÷£»

2.Authorizer ÊÇÕæÕýµÄÊÚȨÕߣ¬Èç¹ûÎÒÃǵ÷ÓÃÈç isPermitted(¡°user:view¡±)£¬ÆäÊ×ÏÈ»áͨ¹ý PermissionResolver °Ñ×Ö·û´®×ª»»³ÉÏàÓ¦µÄ

Permission ʵÀý£»

3.ÔÚ½øÐÐÊÚȨ֮ǰ£¬Æä»áµ÷ÓÃÏàÓ¦µÄ Realm »ñÈ¡ Subject ÏàÓ¦µÄ½ÇÉ«/ȨÏÞÓÃÓÚÆ¥Åä´«ÈëµÄ½ÇÉ«/ȨÏÞ£»

4.Authorizer »áÅÐ¶Ï Realm µÄ½ÇÉ«/ȨÏÞÊÇ·ñºÍ´«ÈëµÄÆ¥Å䣬Èç¹ûÓжà¸ö Realm£¬»áµ÷Óà ModularRealmAuthorizer ½øÐÐÑ­»·Åжϣ¬Èç¹ûÆ¥ÅäÈç isPermitted*/hasRole*»á·µ»Ø true£¬·ñ Ôò·µ»Ø false ±íʾÊÚȨʧ°Ü¡£

6.2 ½ÓÏÂÀ´ÎÒÃÇͨ¹ýÒ»¸öÈëÃ۸Àý£¬½øÐÐÒ»¸öÖ±¹ÛµÄ¸ÐÊÜ£»

6.2.2 Ê×ÏÈÎÒÃÇÏÈÇл»µ½ initRealm,×¢Ê͵ô jdbcRealm¡£¸ø user/user Ö¸¶¨ ROLE_USER ½ÇÉ«¡¢¸ø admin/admin Ö¸¶¨ ROLE_ADMIN µÄ½ÇÉ«

6.2.3 ÔÚÓû§µÇ¼³É¹¦ºóÅÐ¶ÏÆäÊÇ·ñÓжÔÓ¦µÄ½ÇÉ«

6.2.4 ͨ¹ý²âÊÔÎÒÃÇ·¢ÏÖÈç¹ûʹÓà admin/admin µÇ¼£¬´òÓ¡µÄÊÇ true¡£

Èç¹ûʹÓà user/user µÇ¼£¬´òÓ¡µÄÊÇ false¡£

6.2.5 ³ýÁË¿ÉÒÔÅäÖýÇÉ«Í⣬ÎÒÃÇ»¹¿ÉÒÔÅäÖÃȨÏÞ£»½ÓÏÂÀ´ÎÒÃÇÀ´ÅäÖÃȨÏÞ

ROLE_USER=user:* ¡¢

±íʾ ROLE_USER ½ÇɫӵÓÐ user:*µÄȨÏÞ£¬*±íʾÈÎÒâ

ROLE_ADMIN=admin:*,user:*

±íʾ ROLE_AMIN ½ÇɫӵÓÐ admin:*ºÍ user:*µÄȨÏÞ£¬*±íʾÈÎÒâ

/res/update.jsp=perms[user:add]

±íʾ·ÃÎÊ/admin/update.jsp ÐèÒªµÇ¼£¬²¢ÇÒÐèÒª user:add ȨÏÞ£»

ͨ¹ý²âÊÔÎÒÃÇ·¢ÏÖ

user/user ºÍ user/admin µÇ¼ºó¶¼¿ÉÒÔ·ÃÎÊ/res/update.jsp ×ÊÔ´µ«ÊÇ admin/admin ²»ÄÜ·ÃÎÊ/admin/**ÏÂÃæµÄ×ÊÔ´

6.2.6×Ô¶¨ÒåRealmÍê³ÉÈÏÖ¤ºÍÊÚȨ¡£ÒªÏëʹÓÃ×Ô¶¨ÒåRelam Íê³ÉÈÏÖ¤ºÍÊÚȨ£¬½¨Òé¼Ì³ÐAuthorizingRealm

public class MyAuthorizingRealm extends AuthorizingRealm {
/**
* ¸Ã·½·¨ÊǽøÐÐÊÚȨµÄ
* @param principals
* @return
*/ @Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
//¸øµÇ½Óû§Ö¸¶¨½ÇÉ«USER_ROLE
info.addRole("ROLE_ADMIN");
//¸øµÇ¼Óû§Ö¸¶¨È¨ÏÞ
info.addStringPermission("user:add");
return info;
}
/**
* ¸Ã·½·¨ÊÇÓÃÀ´½øÐÐÈÏÖ¤µÄ
*/ @Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
String username = (String) token.getPrincipal();
String password = new String((char[]) token.getCredentials());
//Èç¹ûÓû§ÃûÃÜÂëÊÇgang/123
if(username.equals("gang") && password.equals("123")) { return new SimpleAuthenticationInfo(username, password, getName());
}else { throw new AuthenticationException("Óû§Ãû»òÕßÃÜÂë´íÎó");
}
}

6.2.6 ÅäÖÃ×Ô¶¨Òå Realm

6.2.6 ²âÊÔ£»Ê¹Óà gang/li µÇ¼ºóÓµÓнÇÉ« ROLE_ADMIN ºÍȨÏÞ user:add.²»ÄÜ·ÃÎÊ/admin/add.jsp µ«ÊÇ¿ÉÒÔ·ÃÎÊ/res/update.jsp

Æß¡¢Spring ÕûºÏ shiro

ÔÚʵ¼Ê¿ª·¢ÖÐÎÒÃÇͨ³£¶¼²»»áµ¥¶ÀʹÓà shiro£¬¶¼ÊÇºÍ spring ½øÐÐÕûºÏ£¬½ÓÏÂÀ´ÎÒÃÇÒªÍê³É spring ºÍ shiro ÕûºÏ£»

7.1£º

µ¼Èë spring ºÍ shiro ÕûºÏÏà¹ØÒÀÀµ°ü

<dependency>
<groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.0.5.RELEASE</version>
</dependency> <dependency>
<groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId>
<version>1.4.1</version>
</dependency>

7.2£º±àд spring µÄÅäÖÃÎļþ applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org
/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XML
Schema-instance" xsi:schemaLocation="http://www.
springframework.org/schema/beans http://www.springframework.org/schema/
beans/spring-beans.xsd">
<!--ÅäÖÃ×Ô¶¨ÒåReleam-->
<bean id="myAuthorizingRealm" class="cn.itcast.realm.MyAuthorizingRealm"></bean>
<!--ÅäÖÃÈÏÖ¤¹ÜÀíÆ÷-->
<bean id="securityManager" class="org.apache.
shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="myAuthorizingRealm"><
/property>
</bean>
<!--ÅäÖÃshiroµÄ¹ýÂËÆ÷-->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.
ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager"/>
<!--µÇÂ¼Ò³Ãæ-->
<property name="loginUrl" value="/login.jsp"/>
<!--µÇ¼³É¹¦ºó£¬Ìø×ªµÄÒ³Ãæ-->
<property name="successUrl" value="/admin/add.jsp"/>
<!--δÊÚȨµÄÒ³Ãæ-->
<property name="unauthorizedUrl" value="/401.jsp"/>
<property name="filterChainDefinitions"> <value>
/admin/**=authc,roles[ROLE_USER]
/login=anon
/res/update.jsp=perms[user:add]
/logout=logout
</value>
</property>
</bean>
</beans>

7.2 ÔÚ web.xml ÖÐʹÓà ContextLoaderListener ¼ÓÔØ spring µÄÅäÖÃÎļþ.

<!--¼ÓÔØspringµÄÅäÖÃÎļþ-->
<listener>
<listener-class>org.springframework.web.context.
ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--ÅäÖÃshiroµÄ´úÀí¹ýÂËÆ÷-->
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.
DelegatingFilterProxy</filter-class> <init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
   
2070 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

iOSÓ¦Óð²È«¿ª·¢£¬Äã²»ÖªµÀµÄÄÇЩÊÂÊõ
Web°²È«Ö®SQL×¢Èë¹¥»÷
ÒÆ¶¯APP°²È«ÔÚÉøÍ¸²âÊÔÖеÄÓ¦ÓÃ
´ÓGoogle±¸·Ý»¥ÁªÍø¿´¡°Êý¾Ý°²È«¡±
 
Ïà¹ØÎĵµ

web°²È«Éè¼ÆÓë·À»¤
»¥ÁªÍøº£Á¿ÄÚÈݰ²È«´¦Àí¼¼Êõ
ºÚ¿Í¹¥»÷Óë·À·¶¼¼Êõ
WEBºÚºÐ°²È«¼ì²â
 
Ïà¹Ø¿Î³Ì

WEBÍøÕ¾ÓëÓ¦Óð²È«Ô­ÀíÓëʵ¼ù
webÓ¦Óð²È«¼Ü¹¹Éè¼Æ
´´½¨°²È«µÄJ2EE WebÓ¦ÓôúÂë
ÐÅÏ¢°²È«ÎÊÌâÓë·À·¶
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
ÎïÁªÍø°²È«¸ÅÊö
Ê·ÉÏ×îÏêϸµÄÇø¿éÁ´¼¼Êõ¼Ü¹¹·ÖÎö
Ò»ÎĶÁ¶®Çø¿éÁ´ÕûÌå¼Ü¹¹¼°Ó¦Óð¸Àý
Çø¿éÁ´¼¼Êõ¼Ü¹¹
°²È«¼Ü¹¹ÆÀÉóʵս
×îпγÌ
WebÓ¦Óð²È«¼Ü¹¹¡¢ÈëÇÖ¼ì²âÓë·À»¤
ÎïÁªÍø¹Ø¼ü¼¼Êõ¡¢°²È«Óë±ßÔµ¼ÆËã
Çø¿éÁ´°²È«¼¼Êõʵ¼ùÖ¸ÄÏ
ÔÆ·þÎñÓ밲ȫ¼Ü¹¹
»¥ÁªÍø°²È«¿ª·¢·½·¨Óëʵ¼ù
³É¹¦°¸Àý
ÖйúÒøÐÐ ÐÅÏ¢°²È«¼¼Êõ¼°Éî¶È·ÀÓù
±±¾© WebÓ¦Óð²È«¼Ü¹¹¡¢ÈëÇÖ¼ì²âÓë·À»¤
ij²ÆË°ÁìÓòÖªÃûIT·þÎñÉÌ Web°²È«²âÊÔ
ÆÕÈð¿Ë˹ web°²È«Éè¼Æ¡¢²âÊÔÓëÓÅ»¯
±±¾©ºÍÀûʱ ÐÔÄܺͰ²È«ÐÔ²âÊÔ