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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Shiro°²È«¿ò¼Ü
 
 
  2434  次浏览      31
2020-1-20
 
±à¼­ÍƼö:
ÎÄÕÂÖ÷Òª½éÉÜÒ»¸ö°²È«¿ò¼ÜShiro£¬²¢ÇÒÏêϸ½éÉÜÁËShiro¼Ü¹¹Í¼¡¢»·¾³´î½¨¡¢ÈÏ֤ʵÏÖÒÔ¼°ÃÜÂë¼ÓÃÜʵÏÖ·½°¸µÈÏà¹ØÄÚÈÝ£¬Ï£Íû¶ÔÄúÄÜÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚcnblogs£¬ÓÉ»ðÁú¹ûÈí¼þLuca±à¼­¡¢ÍƼö¡£

Ò»¡¢Shiro¼ò½é

Apache ShiroÊÇÒ»¸öÇ¿´óÒ×ÓõÄJava°²È«¿ò¼Ü£¬ÌṩÁËÈÏÖ¤¡¢ÊÚȨ¡¢¼ÓÃܺͻỰ¹ÜÀíµÈ¹¦ÄÜ¡£

¶ÔÓÚÈκÎÒ»¸öÓ¦ÓóÌÐò£¬Shiro¶¼¿ÉÒÔÌá¹©È«ÃæµÄ°²È«¹ÜÀí·þÎñ¡£Æä²»½ö¿ÉÒÔÓÃÔÚJavaSE»·¾³£¬Ò²¿ÉÒÔÓÃÔÚJavaEE»·¾³¡£

¶þ¡¢Shiro¼Ü¹¹Í¼

1.´ÓÍⲿÀ´¿´Shiro£¬¼´´ÓÓ¦ÓóÌÐò½Ç¶ÈÀ´¹Û²ìÈçºÎʹÓÃShiroÍê³É¹¤×÷¡£ÈçÏÂͼ£º

2.´ÓShiroÄÚ²¿¿´ShiroµÄ¼Ü¹¹£¬ÈçÏÂͼËùʾ£º

Subject(org.apache.shiro.subject.Subject)µ±Ç°ÓëÈí ¼þ½øÐн»»¥µÄʵÌ壨Óû§£¬µÚÈý·½·þÎñ£¬cron job£¬µÈ µÈ£©µÄ°²È«Ìض¨¡°ÊÓͼ¡±

SecurityManager£ºSecurityManager ÊÇ Shiro ¼Ü¹¹µÄÐÄÔà¡£Ëü»ù±¾ÉÏÊÇÒ»¸ö¡°±£»¤É¡¡±¶ÔÏó£¬Ð­µ÷Æä¹ÜÀíµÄ×é¼þÒÔÈ·±£ËüÃÇÄܹ»Ò»Æð˳ÀûµÄ¹¤×÷ÀàËÆÓÚSpringMVCÖеÄÈë¿Ú servlet

Realms£ºÓò Realms ÔÚ Shiro ºÍÄãµÄÓ¦ÓóÌÐòµÄ°²È«Êý¾ÝÖ®¼äµ£µ± ¡°ÇÅÁº¡±»ò¡°Á¬½ÓÆ÷¡±¡£µ±Ëüʵ¼ÊÉÏÓ밲ȫÏà¹ØµÄÊý¾ÝÈçÓÃ

À´Ö´ÐÐÉí·ÝÑéÖ¤£¨µÇ¼£©¼°ÊÚȨ£¨·ÃÎÊ¿ØÖÆ£©µÄÓû§ÕÊ»§½»»¥Ê±£¬ Shiro´ÓÒ»¸ö»ò¶à¸öΪӦÓóÌÐòÅäÖõÄRealÖÐѰÕÒÐí¶àÕâÑùµÄ¶«Î÷

Shiro µÄ»·¾³´î½¨

ʹÓà shiro ʵÏֵǽµÄ²Ù×÷

µÚÒ»²½ µ¼°ü

µÚ¶þ²½£ºÊéд shiro.ini Îļþ

[users]
zs=123
sxt=root

µÚÈý²½£ºÊéд²âÊÔ´úÂë

import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.config.IniSecurityManagerFact ory; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.Factory; import org.apache.shiro.mgt.SecurityManager;
public class TestA {
public static void main(String[] args) {
//[1]½âÎöshiro.iniÎļþ
Factory<SecurityManager> factory =new IniSecurityManagerFactory("classpath:shiro.ini ");
//[2]ͨ¹ýSecurityManager¹¤³§»ñµÃ SecurityManagerʵÀý
SecurityManager securityManager = factory.getInstance();
//[3]°ÑSecurityManager¶ÔÏóÉèÖõ½ÔËÐл·¾³ÖÐ
SecurityUtils.setSecurityManager(securityManag er);
//[4]ͨ¹ýSecurityUtils»ñµÃÖ÷Ìåsubject Subject subject = SecurityUtils.getSubject();
//[5]Êéд×Ô¼ºÊäÈëµÄÕ˺źÍÃÜÂë---Ï൱ÓÚÓû§×Ô ¼ºÊäÈëµÄÕ˺źÍÃÜÂë

//ÎÒÃÇÄÃ×Å×Ô¼ºÊéдÓû§ÃûÃÜÂëÈ¥ºÍshiro.ini ÎÄ ¼þÖеÄÕ˺ÅÃÜÂë±È½Ï UsernamePasswordToken token =new UsernamePasswordToken("sxt","root");
//[6]½øÐÐÉí·ÝµÄÑéÖ¤ subject.login(token);
//[7]ͨ¹ý·½·¨ÅжÏÊÇ·ñµÇ¼³É¹¦
if(subject.isAuthenticated()){ System.out.println("µÇ¼³É¹¦");
}else { System.out.println("µÇ¼ʧ°Ü");
}
}
}

Shiro Ñé֤ʱÒì³£·ÖÎö

DisabledAccountException

ÕË»§Ê§Ð§Òì³£

ConcurrentAccessException

¾ºÕù´ÎÊý¹ý¶à

ExcessiveAttemptsException

³¢ÊÔ´ÎÊý¹ý¶à

UnknownAccountException

Óû§Ãû²»ÕýÈ·

IncorrectCredentialsException

ƾ֤£¨ÃÜÂ룩²»ÕýÈ·

ExpiredCredentialsException

ƾ֤¹ýÆÚ

Shiro--ÈÏÖ¤Á÷³Ì

Èý¡¢ShiroÉæ¼°³£¼ûÃû´Ê

ËÄ¡¢ShiroÅäÖÃÎļþÏê½â

shiro.iniÎļþ·ÅÔÚclasspathÏÂ,shiro»á×Ô¶¯²éÕÒ¡£ÆäÖиñʽÊÇkey/value¼üÖµ¶ÔÅäÖá£INIÅäÖÃÎļþÒ»°ãÊÊÓÃÓÚÓû§ÉÙÇÒ²»ÐèÒªÔÚÔËÐÐʱ¶¯Ì¬´´½¨µÄÇé¾°ÏÂʹÓá£

iniÎļþÖÐÖ÷ÒªÅäÖÃÓÐËÄ´óÀࣺmain£¬users£¬roles£¬urls

ʾÀý£º

1¡¢[main]

mainÖ÷ÒªÅäÖÃshiroµÄһЩ¶ÔÏó£¬ÀýÈçsecurityauthenticator£¬authcStrategy µÈµÈ,ÀýÈ磺

2¡¢[users]

[users]ÔÊÐíÄãÅäÖÃÒ»×龲̬µÄÓû§£¬°üº¬Óû§Ãû£¬ÃÜÂ룬½ÇÉ«£¬Ò»¸öÓû§

¿ÉÒÔÓжà¸ö½ÇÉ«£¬¿ÉÒÔÅäÖöà¸ö½ÇÉ«£¬ÀýÈç:

3¡¢[roles]

[roles]½«½ÇÉ«ºÍȨÏÞ¹ØÁªÆðÀ´£¬¸ñʽΪ£º½ÇÉ«Ãû=ȨÏÞ×Ö·û´®1£¬È¨ÏÞ×Ö·û

´®2¡­..£¬ÀýÈ磺

4¡¢[urls]

Õⲿ·ÖÅäÖÃÖ÷ÒªÔÚwebÓ¦ÓÃÖУ¬¸ñʽΪ£ºurl=À¹½ØÆ÷[²ÎÊý]£¬À¹½ØÆ÷[²ÎÊý]¡­¡­£¬ÀýÈç

Îå¡¢ÈÏ֤ʵÏÖ

ÈÏÖ¤£ºÑéÖ¤Óû§ÊÇ·ñºÏ·¨

ÔÚ shiro ÖУ¬Óû§ÐèÒªÌṩprincipals £¨Éí·Ý£©ºÍcredentials£¨Æ¾Ö¤£©

¸øshiro£¬´Ó¶øÊµÏÖ¶ÔÓû§Éí·ÝµÄÑéÖ¤¡£

5.1.principals(Óû§Ãû)

Éí·Ý£¬¼´Ö÷ÌåµÄ±êʶÊôÐÔ£¬¿ÉÒÔÊÇÈκζ«Î÷£¬ÈçÓû§Ãû¡¢ÓÊÏäµÈ£¬Î¨Ò»¼´¿É¡£

ÀýÈ磺Óû§Ãû/ÓÊÏä/ÊÖ»úºÅµÈ¡£

5.2.credentials(ÃÜÂë)

ƾ֤£¬¼´Ö»ÓÐÖ÷ÌåÖªµÀµÄ°²È«Öµ£¬ÈçÃÜÂë/Êý×ÖÖ¤ÊéµÈ¡£

×î³£¼ûµÄprincipalsºÍcredentials×éºÏ¾ÍÊÇÓû§Ãû/ÃÜÂëÁË¡£

5.3 ʵÏÖ²½Öè

5.3.1 µ¼Èëjar°ü

5.3.2 ´ÓÔ´ÂëµÄʾÀýÏîÄ¿quickstartÖп½±´shiro.ini·Åµ½srcÏ£¬²¢ÅäÖÃ

5.3.3 ±àд´úÂë

package com.bjsxt.test;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.junit.Test;

//ʵÏÖ¼òµ¥ÈÏÖ¤
public class AuthenticationTest {
@Test
public void testAuthentication(){
//1.¹¹½¨SecurityManager¹¤³§
IniSecurityManagerFactory securityManagerFactory = new IniSecurityManagerFactory("classpath:shiro.ini");
//2.ͨ¹ýsecurityManagerFactory¹¤³§»ñÈ¡SecurityManagerʵÀý
SecurityManager securityManager = securityManagerFactory.getInstance();
//3.½«securityManagerÉèÖõ½ÔËÐл·¾³µ±ÖÐ
SecurityUtils.setSecurityManager(securityManager);
//4.»ñÈ¡subjectʵÀý
Subject subject = SecurityUtils.getSubject();
//5.´´½¨Óû§ÃûÃÜÂëÑéÖ¤ÁîÅÆToken
UsernamePasswordToken token = new UsernamePasswordToken ("victor","123456");
//6.½øÐÐÉí·ÝÑéÖ¤
subject.login(token);
//7.ÅжÏÊÇ·ñÈÏ֤ͨ¹ý
System.out.println(subject.isAuthenticated());
}
}

shiro.ini

[users]
victor=123456

Áù¡¢JDBCRealm

ShiroĬÈÏʹÓÃ×Ô´øµÄIniRealm£¬IniRealm´ÓiniÅäÖÃÎļþÖжÁÈ¡Óû§µÄÐÅÏ¢¡£

´ó²¿·ÖÇé¿öÏÂÐèÒª´ÓϵͳµÄÊý¾Ý¿âÖжÁÈ¡Óû§ÐÅÏ¢£¬ËùÒÔÐèҪʹÓÃJDBCRealm»ò×Ô¶¨ÒåRealm¡£

ÐèÇó£ºÊ¹ÓÃJDBCRealmÌṩÊý¾ÝÔ´£¬´Ó¶øÊµÏÖÈÏÖ¤

ʵÏÖ²½Ö裺

6.1½¨users±í£¨±íÃû¡¢×ֶζÔÓ¦ÉÏ£©

6.2Ìí¼Ójar°ü£¨Êý¾Ý¿âÇý¶¯¡¢Êý¾Ý¿âÁ¬½Ó³Ø¡¢beanutilsµÈ£©

6.3±àдshiro.ini

6.4±àд²âÊÔ´úÂë

AuthenticationTest.java

package com.bjsxt.test;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.junit.Test;

//ʵÏÖ¼òµ¥ÈÏÖ¤
public class AuthenticationTest {
@Test
public void testAuthentication(){
//1.¹¹½¨SecurityManager¹¤³§
IniSecurityManagerFactory securityManagerFactory = new IniSecurityManagerFactory("classpath:shiro.ini");
//2.ͨ¹ýsecurityManagerFactory¹¤³§»ñÈ¡SecurityManagerʵÀý
SecurityManager securityManager = securityManagerFactory.getInstance();
//3.½«securityManagerÉèÖõ½ÔËÐл·¾³µ±ÖÐ
SecurityUtils.setSecurityManager(securityManager);
//4.»ñÈ¡subjectʵÀý
Subject subject = SecurityUtils.getSubject();
//5.´´½¨Óû§ÃûÃÜÂëÑéÖ¤ÁîÅÆToken
UsernamePasswordToken token = new UsernamePasswordToken ("victor","123456");
//6.½øÐÐÉí·ÝÑéÖ¤
subject.login(token);
//7.ÅжÏÊÇ·ñÈÏ֤ͨ¹ý
System.out.println(subject.isAuthenticated());
}
}

shiro.ini

[main]
#ÅäÖÃRealm
jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm

#ÅäÖÃÊý¾ÝÔ´
dataSource = com.mchange.v2.c3p0.ComboPooledDataSource
dataSource.driverClass = com.mysql.jdbc.Driver
dataSource.jdbcUrl = jdbc:mysql:///test
dataSource.user = root
dataSource.password = victor

jdbcRealm.dataSource = $dataSource

#½«Realm×¢Èë¸øSecurityManager
securityManager.realm = $jdbcRealm

ÈÏÖ¤²ßÂÔ

¹æ¶¨ÁËÈç¹ûÓжà¸öÊý¾ÝÔ´µÄʱºòÓ¦¸ÃÈçºÎ²Ù×÷

AtLeastOneSuccessfulStrategy

Èç¹ûÒ»¸ö£¨»ò¸ü¶à£©Realm ÑéÖ¤³É¹¦£¬ÔòÕûÌåµÄ³¢ÊÔ±»ÈÏΪÊdzɹ¦µÄ¡£

Èç¹ûûÓÐÒ»¸öÑéÖ¤³É¹¦£¬

ÔòÕûÌå³¢ÊÔʧ°Ü ÀàËÆÓÚ java ÖÐµÄ &

FirstSuccessfulStrategy

Ö»ÓеÚÒ»¸ö³É¹¦µØÑéÖ¤µÄ Realm ·µ»ØµÄÐÅÏ¢½«±»Ê¹Óá£ËùÓнøÒ»²½µÄ

Realm ½«±»ºöÂÔ¡£Èç¹ûûÓÐÒ»¸öÑéÖ¤³É¹¦£¬ÔòÕûÌå³¢ÊÔʧ°Ü¡£

ÀàËÆÓÚ java ÖÐµÄ &&

AllSucessfulStrategy

ΪÁËÕûÌåµÄ³¢ÊԳɹ¦£¬ËùÓÐÅäÖÃµÄ Realm ±ØÐëÑéÖ¤³É¹¦¡£Èç¹ûûÓÐÒ»¸öÑé

Ö¤³É¹¦£¬ÔòÕûÌå³¢ÊÔʧ°Ü

package com.bjsxt.shiro1;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.realm.Realm;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;

public class TestA {

public static void main(String[] args) {

/*Realm*/

//[1]½âÎöshiro.iniÎļþ
Factory<SecurityManager> factory =new IniSecurityManagerFactory("classpath:shiro-jdbc.ini");

//[2]ͨ¹ýSecurityManager¹¤³§»ñµÃSecurityManagerʵÀý
SecurityManager securityManager = factory.getInstance();

//[3]°ÑSecurityManager¶ÔÏóÉèÖõ½ÔËÐл·¾³ÖÐ
SecurityUtils.setSecurityManager(securityManager);

//[4]ͨ¹ýSecurityUtils»ñµÃÖ÷Ìåsubject
Subject subject = SecurityUtils.getSubject();

//[5]Êéд×Ô¼ºÊäÈëµÄÕ˺źÍÃÜÂë---Ï൱ÓÚÓû§×Ô¼ºÊäÈëµÄÕ˺źÍÃÜÂë
//ÎÒÃÇÄÃ×Å×Ô¼ºÊéдÓû§ÃûÃÜÂëÈ¥ºÍshiro.ini ÎļþÖеÄÕ˺ÅÃÜÂë±È½Ï
UsernamePasswordToken token =new UsernamePasswordToken("root","123");


try {
//[6]½øÐÐÉí·ÝµÄÑéÖ¤
subject.login(token);

//[7]ͨ¹ý·½·¨ÅжÏÊÇ·ñµÇ¼³É¹¦

if(subject.isAuthenticated()){
System.out.println("µÇ¼³É¹¦");

}
} catch (IncorrectCredentialsException e) {

System.out.println("µÇ¼ʧ°Ü");

}catch (UnknownAccountException e){

System.out.println("Óû§Ãû²»ÕýÈ·");
}
}
}

[main]
#»ñµÃÊý¾ÝÔ´A
dataSou=com.mchange.v2.c3p0.ComboPooledDataSource
dataSou.driverClass=com.mysql.jdbc.Driver
dataSou.jdbcUrl=jdbc:mysql://127.0.0.1:3306/shiro
dataSou.user=root
dataSou.password=root

#ÅäÖÃÁËjdbcRealmA
jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.dataSource=$dataSou

#»ñµÃÊý¾ÝÔ´B
dataSou1=com.mchange.v2.c3p0.ComboPooledDataSource
dataSou1.driverClass=com.mysql.jdbc.Driver
dataSou1.jdbcUrl=jdbc:mysql://127.0.0.1:3306/shiro1
dataSou1.user=root
dataSou1.password=root

#ÅäÖÃÁËjdbcRealmB
jdbcRealm1=org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm1.dataSource=$dataSou1

#ÅäÖÃÑéÖ¤Æ÷
authenticationStrategy=org. apache .shiro.authc.pam.FirstSuccessfulStrategy

#ÉèÖÃsecurityManagerÖÐrealm
securityManager.realms=$jdbcRealm,$jdbcRealm1
securityManager.authenticator.authenticationStrategy =$authenticationStrategy

Æß¡¢ÈçºÎ×Ô¶¨ÒåRealm

[1]ΪʲôʹÓÃ×Ô¶¨Òå Realm

ÎÒÃÇʹÓà JDBCRealm µÄʱºò·¢ÏÖ£¬shiro µÄµ×²ã×Ô¼º·â×°ÁËÊý¾Ý¿â

±íµÄÃû³ÆºÍ×ֶεÄÃû³Æ£¬ÕâÑù¾ÍÔì³ÉÁËʹÓÃÆðÀ´·Ç³£²»·½±ã

[2]½â¾ö·½°¸

×Ô¶¨Òå Realm

ÎÒÃÇÈç¹û×Ô¼º¶¨Òå realm µÄ»°£¬¿ÉÒÔʵÏÖÕâ¸ö½Ó¿Ú

×Ô¶¨ÒåRealm£¬¿ÉÒÔ×¢Èë¸øsecurityManager¸ü¼ÓÁé»îµÄ°²È«Êý¾ÝÔ´£¨ÀýÈ磬JDBCRealmÖбíºÍ×ֶζ¼ÏÞ¶¨ÁË£©

ͨ¹ýʵÏÖRealm½Ó¿Ú£¬»ò¸ù¾ÝÐèÇó¼Ì³ÐËûµÄÏàÓ¦×ÓÀ༴¿É¡£

ÐèÇó£ºÊ¹ÓÃ×Ô¶¨ÒåRealmÌṩÊý¾ÝÔ´£¬´Ó¶øÊµÏÖÈÏÖ¤

ʵÏÖ²½Ö裺

6.1Ìí¼Ójar°ü

6.2±àд×Ô¶¨ÒåRealm

6.3±àдshiro.ini

6.4±àд²âÊÔÀà

package com.bjsxt.shiro2;

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class UserRealm extends AuthorizingRealm {

//ÈÏÖ¤
@Override
protected AuthenticationInfo doGetAuthenticationInfo (AuthenticationToken authenticationToken) throws AuthenticationException {

//System.out.println(authenticationToken .getPrincipal());

try {
Class.forName("com.mysql.jdbc.Driver");

Connection conn = DriverManager. getConnection ("jdbc:mysql://127.0.0.1:3306/shiro", "root", "root");

PreparedStatement prepareStatement = conn.prepareStatement("select pwd from admin where uname =? ");

prepareStatement.setObject (1,authenticationToken.getPrincipal());


ResultSet rs = prepareStatement.executeQuery();

while (rs.next()){

SimpleAuthenticationInfo info=new SimpleAuthenticationInfo (authenticationToken .getPrincipal(),rs.getString("pwd"),"userRealm");

return info;

}
} catch (Exception e) {
e.printStackTrace();
}

return null;
}

//ÊÚȨ
@Override
protected AuthorizationInfo doGetAuthorizationInfo (PrincipalCollection principalCollection) {
return null;
}

}

package com.bjsxt.shiro2;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;

public class TestB {

public static void main(String[] args) {

/*Realm*/

//[1]½âÎöshiro.iniÎļþ
Factory<SecurityManager> factory =new IniSecurityManagerFactory("classpath:shiro-jdbc2.ini");

//[2]ͨ¹ýSecurityManager¹¤³§»ñµÃSecurityManagerʵÀý
SecurityManager securityManager = factory.getInstance();

//[3]°ÑSecurityManager¶ÔÏóÉèÖõ½ÔËÐл·¾³ÖÐ
SecurityUtils.setSecurityManager(securityManager);

//[4]ͨ¹ýSecurityUtils»ñµÃÖ÷Ìåsubject
Subject subject = SecurityUtils.getSubject();

//[5]Êéд×Ô¼ºÊäÈëµÄÕ˺źÍÃÜÂë---Ï൱ÓÚÓû§×Ô¼ºÊäÈëµÄÕ˺źÍÃÜÂë
//ÎÒÃÇÄÃ×Å×Ô¼ºÊéдÓû§ÃûÃÜÂëÈ¥ºÍshiro.ini ÎļþÖеÄÕ˺ÅÃÜÂë±È½Ï
UsernamePasswordToken token =new UsernamePasswordToken("root","123");

try {
//[6]½øÐÐÉí·ÝµÄÑéÖ¤
subject.login(token);

//[7]ͨ¹ý·½·¨ÅжÏÊÇ·ñµÇ¼³É¹¦

if(subject.isAuthenticated()){
System.out.println("µÇ¼³É¹¦");

}
} catch (IncorrectCredentialsException e) {

System.out.println("µÇ¼ʧ°Ü");

}catch (UnknownAccountException e){

System.out.println("Óû§Ãû²»ÕýÈ·");
}
}
}

[main]
#ÉèÖÃsecurityManagerÖÐrealm
userRealm=com.bjsxt.shiro2.UserRealm
securityManager.realms=$userRealm

¡¾´úÂëʾÀý¡¿

realms

package com.bjsxt.realms;

import java.net.ConnectException;
import java.security.interfaces.RSAKey;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.realm.AuthenticatingRealm;

import com.mysql.jdbc.Driver;

public class CustomRealm extends AuthenticatingRealm {

private String principal;
private String credentials;
private ResultSet rs;
private Statement state;
private Connection conn;

@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
//ʹÓÃJDBC,´ÓÊý¾Ý¿â»ñÈ¡Êý¾Ý
try {
//1.×¢²áÇý¶¯
Driver driver = new Driver();
DriverManager.registerDriver(driver);
//2.»ñÈ¡Á¬½Ó¶ÔÏó
String url ="jdbc:mysql:///test";
String user = "root";
String password = "victor";
conn = DriverManager.getConnection(url , user , password );
state = conn.createStatement();
//4.Ö´ÐÐsqlÓï¾ä
String sql = "select userName,passwd from starLogin";
rs = state.executeQuery(sql );
//5.´¦Àí½á¹û¼¯
while (rs.next()) {
principal = rs.getString("userName");
credentials = rs.getString("passwd");
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(state != null){
try {
state.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(principal, credentials, "customRealm");
return simpleAuthenticationInfo;
}

}

AuthenticationTest

package com.bjsxt.test;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.junit.Test;

//ʵÏÖ¼òµ¥ÈÏÖ¤
public class AuthenticationTest {
@Test
public void testAuthentication(){
//1.¹¹½¨SecurityManager¹¤³§
IniSecurityManagerFactory securityManagerFactory = new IniSecurityManagerFactory("classpath:shiro.ini");
//2.ͨ¹ýsecurityManagerFactory¹¤³§»ñÈ¡SecurityManagerʵÀý
SecurityManager securityManager = securityManagerFactory.getInstance();
//3.½«securityManagerÉèÖõ½ÔËÐл·¾³µ±ÖÐ
SecurityUtils.setSecurityManager(securityManager);
//4.»ñÈ¡subjectʵÀý
Subject subject = SecurityUtils.getSubject();
//5.´´½¨Óû§ÃûÃÜÂëÑéÖ¤ÁîÅÆToken
UsernamePasswordToken token = new UsernamePasswordToken("victor","123");
//6.½øÐÐÉí·ÝÑéÖ¤
subject.login(token);
//7.ÅжÏÊÇ·ñÈÏ֤ͨ¹ý
System.out.println(subject.isAuthenticated());
}
}

Shrio.ini

[main]
#ÅäÖÃRealm
customRealm = com.bjsxt.realms.CustomRealm

#½«Realm×¢Èë¸øSecurityManager
securityManager.realm = $customRealm

°Ë¡¢ÃÜÂë¼ÓÃÜʵÏÖ·½°¸

8.1¼¸ÖÖ³£¼û¼ÓÃÜËã·¨±È½Ï

8.1.1¶Ô³Æ¼ÓÃÜËã·¨(¼ÓÃÜÓë½âÃÜÃÜÔ¿Ïàͬ)

8.1.2·Ç¶Ô³ÆËã·¨(¼ÓÃÜÃÜÔ¿ºÍ½âÃÜÃÜÔ¿²»Í¬)

8.1.3 ¶Ô³ÆÓë·Ç¶Ô³ÆËã·¨±È½Ï

8.1.4 É¢ÁÐËã·¨±È½Ï¡®

8.2 MD5¼ÓÃÜ¡¢¼ÓÑÎÓëµü´ú

¼ÓÑΣº

ʹÓÃMD5´æÔÚÒ»¸öÎÊÌ⣬ÏàͬµÄpasswordÉú²úµÄHashÖµÊÇÏàͬµÄ£¬Èç

¹ûÁ½¸öÓû§ÉèÖÃÁËÏàͬµÄÃÜÂ룬ÄÇôÊý¾Ý¿âµ±¾Í»á´æ´¢ÏàͬµÄÖµ£¬ÕâÑùÊǼ«

²»°²È«µÄ¡£

¼ÓSalt¿ÉÒÔÒ»¶¨³Ì¶ÈÉϽâ¾öÕâÒ»ÎÊÌâ¡£Ëùν¼ÓSalt·½·¨£¬¾ÍÊǼӵã

¡°×ôÁÏ¡±¡£Æä»ù±¾Ïë·¨ÊÇÕâÑùµÄ£ºµ±Óû§Ê×´ÎÌṩÃÜÂëʱ£¨Í¨³£ÊÇ×¢²áʱ£©£¬

ÓÉϵͳ×Ô¶¯ÍùÕâ¸öÃÜÂëÀïÈöһЩ¡°×ôÁÏ¡±£¬È»ºóÔÙÉ¢ÁС£¶øµ±Óû§µÇ¼ʱ£¬ÏµÍ³ÎªÓû§ÌṩµÄ´úÂëÈöÉÏͬÑùµÄ¡°×ôÁÏ¡±£¬È»ºóÉ¢ÁУ¬ÔٱȽÏÉ¢ÁÐÖµ£¬À´È·¶¨ÃÜÂëÊÇ·ñÕýÈ·¡£

¼ÓÑÎÔ­Àí:

¸øÔ­ÎļÓÈëËæ»úÊýÉú³ÉеÄMD5Öµ¡£

µü´ú£º¼ÓÃܵĴÎÊý

¡¾´úÂëʾÀý¡¿

md5Test

package com.bjsxt.test;

import org.apache.shiro.crypto.hash.Md5Hash;
import org.junit.Test;

//MD5¼ÓÃÜ¡¢¼ÓÑÎÒÔ¼°µü´ú
public class MD5Test {
@Test
public void testMD5(){
//md5¼ÓÃÜ
Md5Hash md5 = new Md5Hash("123456");
System.out.println(md5);
//¼ÓÑÎ
md5 = new Md5Hash("123456", "bjsxt");
System.out.println(md5);
//µü´ú
md5 = new Md5Hash("123456", "bjsxt", 2);
System.out.println(md5);
}
}

TestB.java

package com.bjsxt.shiro3;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;

public class TestB {

public static void main(String[] args) {

/*Realm*/

//[1]½âÎöshiro.iniÎļþ
Factory<SecurityManager> factory =new IniSecurityManagerFactory("classpath:shiro-jdbc3.ini");

//[2]ͨ¹ýSecurityManager¹¤³§»ñµÃSecurityManagerʵÀý
SecurityManager securityManager = factory.getInstance();

//[3]°ÑSecurityManager¶ÔÏóÉèÖõ½ÔËÐл·¾³ÖÐ
SecurityUtils.setSecurityManager(securityManager);

//[4]ͨ¹ýSecurityUtils»ñµÃÖ÷Ìåsubject
Subject subject = SecurityUtils.getSubject();

//[5]Êéд×Ô¼ºÊäÈëµÄÕ˺źÍÃÜÂë---Ï൱ÓÚÓû§×Ô¼ºÊäÈëµÄÕ˺źÍÃÜÂë
//ÎÒÃÇÄÃ×Å×Ô¼ºÊéдÓû§ÃûÃÜÂëÈ¥ºÍshiro.ini ÎļþÖеÄÕ˺ÅÃÜÂë±È½Ï
UsernamePasswordToken token =new UsernamePasswordToken("root","111");

try {
//[6]½øÐÐÉí·ÝµÄÑéÖ¤
subject.login(token);

//[7]ͨ¹ý·½·¨ÅжÏÊÇ·ñµÇ¼³É¹¦

if(subject.isAuthenticated()){
System.out.println("µÇ¼³É¹¦");

}
} catch (IncorrectCredentialsException e) {

System.out.println("µÇ¼ʧ°Ü");


}catch (UnknownAccountException e){

System.out.println("Óû§Ãû²»ÕýÈ·");
}
}
}

TestDemo.java

package com.bjsxt.shiro3;

import org.apache.shiro.crypto.hash.Md5Hash;
public class TestDemo {
public static void main(String[] args) {
//ʹÓÃMD5¼ÓÃÜ
Md5Hash md5=new Md5Hash("1111");
System.out.println("1111=="+md5);
//¼ÓÑÎ
md5=new Md5Hash("1111","sxt");
System.out.println("1111=="+md5);
//µü´ú´ÎÊý
md5=new Md5Hash("123","sxt",2);
System.out.println("1111=="+md5);

}

}

shiro-jdbc.ini

[main]
#ÉèÖÃsecurityManagerÖÐrealm
credentialsMatcher=org.apache.shiro.authc. credential.HashedCredentialsMatcher
credentialsMatcher.hashAlgorithmName=md5
credentialsMatcher.hashIterations=2

userRealm=com.bjsxt.shiro3.UserRealm
userRealm.credentialsMatcher=$credentialsMatcher
securityManager.realms=$userRealm

8.3 ƾ֤ƥÅäÆ÷

ÔÚRealm½Ó¿ÚµÄʵÏÖÀàAuthenticatingRealmÖÐÓÐcredentialsMatcherÊôÐÔ¡£

ÒâΪƾ֤ƥÅäÆ÷¡£³£ÓÃÀ´ÉèÖüÓÃÜËã·¨¼°µü´ú´ÎÊýµÈ¡£

Shiro.ini

[main]

#ÅäÖÃÆ¾Ö¤Æ¥ÅäÆ÷
credentialsMatcher=org.apache.shiro.authc. credential.HashedCredentialsMatcher

#ÉèÖÃÆ¾Ö¤Æ¥ÅäÆ÷µÄÏà¹ØÊôÐÔ
credentialsMatcher.hashAlgorithmName=MD5
credentialsMatcher.hashIterations=2

#ÅäÖÃRealm
customRealm=com.bjsxt.realms.CustomRealm

#ÅäÖÃRealmµÄƾ֤ƥÅäÆ÷ÊôÐÔ
customRealm.credentialsMatcher=$credentialsMatcher

#½«Realm×¢Èë¸øSecurityManager
securityManager.realm=$customRealm

costomRealm

package com.bjsxt.realms;

import java.net.ConnectException;
import java.security.interfaces.RSAKey;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.realm.AuthenticatingRealm;
import org.apache.shiro.util.ByteSource;

import com.mysql.jdbc.Driver;

public class CustomRealm extends AuthenticatingRealm {

private String principal;
private String credentials;
private ResultSet rs;
private Statement state;
private Connection conn;
private String salt;

@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
//ʹÓÃJDBC,´ÓÊý¾Ý¿â»ñÈ¡Êý¾Ý
try {
//1.×¢²áÇý¶¯
Driver driver = new Driver();
DriverManager.registerDriver(driver);
//2.»ñÈ¡Á¬½Ó¶ÔÏó
String url ="jdbc:mysql:///test";
String user = "root";
String password = "victor";
conn = DriverManager.getConnection(url , user , password );
state = conn.createStatement();
//4.Ö´ÐÐsqlÓï¾ä
String sql = "select userName,passwd,passwd_salt from starLogin";
rs = state.executeQuery(sql );
//5.´¦Àí½á¹û¼¯
while (rs.next()) {
principal = rs.getString("userName");
credentials = rs.getString("passwd");
salt = rs.getString("passwd_salt");
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(state != null){
try {
state.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

ByteSource newSalt = ByteSource.Util.bytes(salt);
SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(principal, credentials,newSalt , "customRealm");
return simpleAuthenticationInfo;
}
}

AutenticationTest

package com.bjsxt.test;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.junit.Test;

//ʵÏÖ¼òµ¥ÈÏÖ¤
public class AuthenticationTest {
@Test
public void testAuthentication(){
//1.¹¹½¨SecurityManager¹¤³§
IniSecurityManagerFactory securityManagerFactory = new IniSecurityManagerFactory("classpath:shiro.ini");
//2.ͨ¹ýsecurityManagerFactory¹¤³§»ñÈ¡SecurityManagerʵÀý
SecurityManager securityManager = securityManagerFactory.getInstance();
//3.½«securityManagerÉèÖõ½ÔËÐл·¾³µ±ÖÐ
SecurityUtils.setSecurityManager(securityManager);
//4.»ñÈ¡subjectʵÀý
Subject subject = SecurityUtils.getSubject();
//5.´´½¨Óû§ÃûÃÜÂëÑéÖ¤ÁîÅÆToken
UsernamePasswordToken token = new UsernamePasswordToken("victor","123456");
//6.½øÐÐÉí·ÝÑéÖ¤
subject.login(token);
//7.ÅжÏÊÇ·ñÈÏ֤ͨ¹ý
System.out.println(subject.isAuthenticated());
}
}

ÊÚȨ

ÊÚȨ:¸øÉí·ÝÈÏ֤ͨ¹ýµÄÈÎÊÚÓèijЩ×ÊÔ´µÄ·ÃÎÊȨÏÞ

ȨÏÞµÄÁ£¶È ´ÖÁ£¶È ϸÁ£¶È

´ÖÁ£¶È

User ¾ßÓÐ CRUD µÄ²Ù×÷ ͨ³£Ö¸µÄÊDZíµÄ²Ù×÷

ϸÁ£¶È

Ö»ÔÊÐí²éѯ id=1 µÄÓû§ ʹÓÃÒµÎñ´úÂëʵÏÖ

Shiro µÄÊÚȨÊÇ´ÖÁ£¶È

½ÇÉ«£º½ÇÉ«¾ÍÊÇȨÏ޵ļ¯ºÏ

Shiro ÖдúÂëµÄʵÏÖ

Ïêϸ¼û´úÂë

package com.bjsxt.shiro1;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;

import java.util.Arrays;

public class TestA {

public static void main(String[] args) {
//[1]½âÎöshiro.iniÎļþ
Factory<SecurityManager> factory =new IniSecurityManagerFactory("classpath:shiro.ini");

//[2]ͨ¹ýSecurityManager¹¤³§»ñµÃSecurityManagerʵÀý
SecurityManager securityManager = factory.getInstance();

//[3]°ÑSecurityManager¶ÔÏóÉèÖõ½ÔËÐл·¾³ÖÐ
SecurityUtils.setSecurityManager(securityManager);

//[4]ͨ¹ýSecurityUtils»ñµÃÖ÷Ìåsubject
Subject subject = SecurityUtils.getSubject();

//[5]Êéд×Ô¼ºÊäÈëµÄÕ˺źÍÃÜÂë---Ï൱ÓÚÓû§×Ô¼ºÊäÈëµÄÕ˺źÍÃÜÂë
//ÎÒÃÇÄÃ×Å×Ô¼ºÊéдÓû§ÃûÃÜÂëÈ¥ºÍshiro.ini ÎļþÖеÄÕ˺ÅÃÜÂë±È½Ï
UsernamePasswordToken token =new UsernamePasswordToken("zs","123");

try {
//[6]½øÐÐÉí·ÝµÄÑéÖ¤
subject.login(token);

} catch (IncorrectCredentialsException e) {
System.out.println("µÇ¼ʧ°Ü");
}


//ÊÚȨµÄ²éѯ

//»ùÓÚ½ÇÉ«µÄÊÚȨ
boolean flag = subject.hasRole("role1");
//System.out.println(flag);

//ÅжÏÊÇ·ñ¾ßÓжà¸ö½ÇÉ«
boolean[] booleans = subject.hasRoles(Arrays.asList ("role1", "role3"));

/*for(Boolean b:booleans){

System.out.println(b);
}*/

//¿ÉÒÔʹÓÃcheckRoleÅжÏÖ¸¶¨Óû§ÊÇ·ñ¾ßÓжÔÓ¦½ÇÉ«
//Èç¹ûÖ¸¶¨Óû§ÏÂûÓжÔÓ¦µÄ½ÇÉ«¾Í»áÅ׳öÒì³£ UnauthorizedException
/* subject.checkRole("role3");

subject.checkRoles("role1","role2");*/


//»ùÓÚ×ÊÔ´µÄÊÚȨ
boolean flag2 = subject.isPermitted("iii");

//System.out.println(flag2);

//ÅжÁÊÇ·ñ¾ßÓжà¸ö×ÊÔ´
boolean permittedAll = subject.isPermittedAll ("add", "oo", "ii");

//ͨ¹ýcheckPermission ½øÐÐÅжÏÖ¸¶¨Óû§ÏÂÊÇ·ñÓÐÖ¸¶¨µÄ×ÊÔ´
//Èç¹ûûÓоͻáÅ׳öUnauthorizedException
subject.checkPermission("uu");

subject.checkPermissions("ii","ooo","add");


}
}

Role.java

package com.bjsxt.shiro1;

import org.apache.shiro.authz.annotation.RequiresRoles;

public class Role {


}

Shiro ÖеÄÊÚȨ¼ì²éµÄ 3 ÖÖ·½Ê½

A¡¢ ±à³Ìʽ

B¡¢ ×¢½âʽ @RequiresRoles("¹ÜÀíÔ±") public void aa(){

}

C¡¢ ±êÇ©ÅäÖà <shiro:hasPermission name="add"> <a>Ìí¼Ó²Ù×÷</a> </shiro:hasPermission>

×Ô¶¨Òå Realm ʵÏÖÊÚȨ

ÎÒÃǽö½öͨ¹ýÅäÖÃÎļþÖ¸¶¨ÊÚȨÊǷdz£µÄ²»Áé»îµÄ£¬ÔÚʵ¼ÊµÄÓ¦ÓÃÖÐÎÒÃÇÊǽ«Óû§µÄÐÅÏ¢ºÍºÏȨÏÞÐÅÏ¢±£´æµ½Êý¾Ý¿âÖУ¬ÎÒÃÇÊÇ´ÓÊý¾Ý¿âÖлñµÃÓû§µÄÐÅÏ¢ £¬Ê¹Óà JDBCRealm ½øÐÐÊÚȨ ¡£Ê¹Óà JDBCRealm ²Ù×÷µÄʱºòÒ²²»ÊǺÜÁé»î¡£ËùÒÔÎÒÃÇÒ»°ãʹÓÃ×Ô¶¨Òå Realm ʵÏÖÊÚȨ¡£

package com.bjsxt.shiro;

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class UserRealm extends AuthorizingRealm {


//ÈÏÖ¤
@Override
protected AuthenticationInfo doGetAuthenticationInfo (AuthenticationToken authenticationToken) throws AuthenticationException {

//System.out.println(authenticationToken.getPrincipal());

try {
Class.forName("com.mysql.jdbc.Driver");

Connection conn = DriverManager.getConnection ("jdbc:mysql://127.0.0.1:3306/shiro", "root", "root");


PreparedStatement prepareStatement = conn.prepareStatement ("select pwd from admin where uname =? ");

prepareStatement.setObject (1,authenticationToken.getPrincipal());

ResultSet rs = prepareStatement.executeQuery();

while (rs.next()){

SimpleAuthenticationInfo info=new SimpleAuthenticationInfo (authenticationToken.getPrincipal(), rs.getString("pwd"),"userRealm");

return info;

}
} catch (Exception e) {
e.printStackTrace();
}


return null;
}



//ÊÚȨ
@Override
protected AuthorizationInfo doGetAuthorizationInfo (PrincipalCollection principalCollection) {

String username = principalCollection.getPrimaryPrincipal().toString();

//»ñµÃusername È»ºóÈ¥Êý¾Ý¿â²éѯÕâ¸öÓû§¶ÔÓ¦µÄ½ÇÉ«£¬ÔÚ¸ù¾Ý½ÇÉ«²éѯ³öÖ¸¶¨½Çɫ϶ÔÓ¦µÄ²Ëµ¥£¬
//·µ»Ø¸øÖ¸¶¨½ÇɫϵÄËùÓв˵¥--List¼¯ºÏ
System.out.println("username="+username);

//Ä£ÄâÊý¾Ý¿â²éµÄ²Ëµ¥
List<String> list =new ArrayList<>();
list.add("updateUser");
list.add("addUser");
list.add("deleteUser");

SimpleAuthorizationInfo simpleAuthorizationInfo =new SimpleAuthorizationInfo();

for(String l:list){
simpleAuthorizationInfo.addStringPermission(l);
}

return simpleAuthorizationInfo;
}

}
   
2434 ´Îä¯ÀÀ       31
 
Ïà¹ØÎÄÕÂ

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

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

WEBÍøÕ¾ÓëÓ¦Óð²È«Ô­ÀíÓëʵ¼ù
webÓ¦Óð²È«¼Ü¹¹Éè¼Æ
´´½¨°²È«µÄJ2EE WebÓ¦ÓôúÂë
ÐÅÏ¢°²È«ÎÊÌâÓë·À·¶