设为首页 收藏本站
查看: 465|回复: 0

[经验分享] Apache Shiro教程(二)简易程序配置

[复制链接]

尚未签到

发表于 2015-8-6 08:08:21 | 显示全部楼层 |阅读模式
1、配置shiro.ini文件
  此处采用 SHA-512 算法加密,哈希1024次,哈希后的密码以64位编码存储



1 # ===================================================================================
2 # Shiro INI configuration
3 # ===================================================================================
4 [main]
5 hashedCredentialsMatcher = org.apache.shiro.authc.credential.HashedCredentialsMatcher
6 hashedCredentialsMatcher.hashAlgorithmName = SHA-512
7 hashedCredentialsMatcher.hashIterations = 1024
8 hashedCredentialsMatcher.storedCredentialsHexEncoded = false
9 saltAwareIniRealm = com.cnblogs.javalouvre.shiro.realm.text.SaltAwareIniRealm
10 saltAwareIniRealm.resourcePath = classpath:shiro.ini
11 saltAwareIniRealm.credentialsMatcher = $hashedCredentialsMatcher
12 securityManager.realm = $saltAwareIniRealm
13 ehCacheManager = org.apache.shiro.cache.ehcache.EhCacheManager
14 ehCacheManager.cacheManagerConfigFile = classpath:ehcache.xml
15 securityManager.cacheManager = $ehCacheManager
16
17 [users]
18 system = E18H4biesus/SiiAyGb/sLDHpRACpwofpmKAgYojqxG8w1mX9aFGu51/O+ha02fpr4zoQXfyE/W919KWv7RwLA==, admin
19 scott  = rzN+XZiPCHa+8O9c7jCnEzCE0BOgzitMU2x1aG6eg5f0wpnZcY9HaxyraO9NqUklI5y2bu1xrtgmJRrDe34xrg==, guest
20
21 [roles]
22 admin = *
23 guest = user:create, user:retrieve, user:update, user:delete
2、自定义Realm
  该类继承自类 org.apache.shiro.realm.text.IniRealm 重写 doGetAuthenticationInfo 方法,设置盐值



1 package com.cnblogs.javalouvre.shiro.realm.text;
2
3 import org.apache.shiro.authc.AuthenticationException;
4 import org.apache.shiro.authc.AuthenticationInfo;
5 import org.apache.shiro.authc.AuthenticationToken;
6 import org.apache.shiro.authc.ExpiredCredentialsException;
7 import org.apache.shiro.authc.LockedAccountException;
8 import org.apache.shiro.authc.SimpleAccount;
9 import org.apache.shiro.authc.UsernamePasswordToken;
10 import org.apache.shiro.realm.text.IniRealm;
11 import org.apache.shiro.util.SimpleByteSource;
12
13 public class SaltAwareIniRealm extends IniRealm {
14
15     @Override
16     protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
17         UsernamePasswordToken upToken = (UsernamePasswordToken) token;
18         SimpleAccount account = getUser(upToken.getUsername());
19         if (account != null) {
20             if (account.isLocked()) {
21                 throw new LockedAccountException("Account [" + account + "] is locked.");
22             }
23             if (account.isCredentialsExpired()) {
24                 throw new ExpiredCredentialsException("The credentials for account [" + account + "] are expired.");
25             }
26         }
27         account.setCredentialsSalt(ByteSource.Util.bytes("Nazi"));
28
29         return account;
30     }
31
32 }
3、编写测试类
  该类继承自 org.apache.shiro.test.AbstractShiroTest



1 package com.cnblogs.javalouvre.simple;
2
3 import static org.junit.Assert.assertTrue;
4
5 import org.apache.shiro.SecurityUtils;
6 import org.apache.shiro.authc.AuthenticationException;
7 import org.apache.shiro.authc.UsernamePasswordToken;
8 import org.apache.shiro.config.IniSecurityManagerFactory;
9 import org.apache.shiro.mgt.SecurityManager;
10 import org.apache.shiro.subject.Subject;
11 import org.apache.shiro.test.AbstractShiroTest;
12 import org.apache.shiro.util.Factory;
13 import org.junit.After;
14 import org.junit.AfterClass;
15 import org.junit.Before;
16 import org.junit.BeforeClass;
17 import org.junit.Test;
18
19 public class SimpleTest extends AbstractShiroTest {
20
21     @BeforeClass
22     public static void setUpBeforeClass() throws Exception {
23         Factory factory = new IniSecurityManagerFactory("classpath:shiro.ini");
24         setSecurityManager(factory.getInstance());
25     }
26
27     @Before
28     public void setUp() {
29         // TODO
30     }
31
32     @Test
33     public void testSimple() {
34         super.setSubject(new Subject.Builder(getSecurityManager()).buildSubject());
35
36         Subject subject = SecurityUtils.getSubject();
37         if (!subject.isAuthenticated()) {
38             UsernamePasswordToken token = new UsernamePasswordToken("scott", "tiger", true);
39             try {
40                 subject.login(token);
41             } catch (AuthenticationException e) {
42                 e.printStackTrace();
43             }
44         }
45
46         assertTrue(subject.hasRole("guest"));
47         assertTrue(subject.isPermitted("user:create"));
48         assertTrue(subject.isPermitted("user:retrieve"));
49         assertTrue(subject.isPermitted("user:update"));
50         assertTrue(subject.isPermitted("user:delete"));
51     }
52
53     @After
54     public void tearDown() {
55         clearSubject();
56     }
57
58     @AfterClass
59     public static void tearDownAfterClass() throws Exception {
60         // TODO
61     }
62
63 }
  
  示例下载

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-94556-1-1.html 上篇帖子: Apache 无法启动 下篇帖子: jdk、apache-ant结合yuicompressor配置的CSS与JS合并压缩工具
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表