如何在 Apache Shiro 中使用编程配置创建新帐户?

Posted

技术标签:

【中文标题】如何在 Apache Shiro 中使用编程配置创建新帐户?【英文标题】:How to create a new Account using programmatic configuration in Apache Shiro? 【发布时间】:2015-11-19 18:49:50 【问题描述】:

我是 Apache Shiro 的新手,我想用编程配置做一个简单的例子。使用 file.INI 时,创建用户并授予他们角色和权限很简单,现在,我想做同样的事情,但使用简单的 java 对象。那么我该怎么做呢?

这是我的代码:

import org.apache.shiro.SecurityUtils; 
import org.apache.shiro.authc.*; 
import org.apache.shiro.config.Ini; 
import org.apache.shiro.config.Ini.Section; 
import org.apache.shiro.config.IniSecurityManagerFactory; 
import org.apache.shiro.mgt.SecurityManager; 
import org.apache.shiro.session.Session; 
import org.apache.shiro.subject.Subject; 
import org.apache.shiro.util.Factory; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

public class TestShiro  

    //private static final transient Logger log = LoggerFactory.getLogger(TestShiro.class); 

    public static void main(String[] args)  
        //Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini"); 
    Ini ini = new Ini(); 
    //HERE I SHOULD ADD ACCOUNTS TO MY OBJECT ini
    Factory<SecurityManager> factory = new IniSecurityManagerFactory(ini); 
    Factory<SecurityManager> factory = new IniSecurityManagerFactory(ini); 
        SecurityManager securityManager = factory.getInstance(); 
        SecurityUtils.setSecurityManager(securityManager); 
        Subject currentUser = SecurityUtils.getSubject(); 

        if ( !currentUser.isAuthenticated() )  
            UsernamePasswordToken token = new UsernamePasswordToken("lonestarrn", "vespaa"); 

            //this is all you have to do to support 'remember me' (no config - built in!): 
            token.setRememberMe(true); 
            try  
                currentUser.login( token ); 
             catch ( UnknownAccountException uae )  
             catch ( IncorrectCredentialsException ice )  
             catch ( LockedAccountException lae )  
             
             catch ( AuthenticationException ae )  
             

         

        if ( currentUser.hasRole( "schwartz" ) )  
            System.out.println("May the Schwartz be with you!" ); 
         else  
            System.out.println( "Hello, mere mortal." ); 
         

     
 

我需要你的帮助,提前谢谢你。

【问题讨论】:

【参考方案1】:

你试过了吗?

Ini ini=new Ini();
Ini.Section section = ini.addSection(IniRealm.USERS_SECTION_NAME);
section.put("guest", "guest, guest");
section.put("lonestarr", "vespa, goodguy");

我是从here 那里得到的。

【讨论】:

以上是关于如何在 Apache Shiro 中使用编程配置创建新帐户?的主要内容,如果未能解决你的问题,请参考以下文章

在 Apache Shiro 中使用 ActiveDirectoryRealm 时如何搜索 ldap 字段?

Java EE 7基于数据库的Apache Shiro配置

Apache Shiro Web应用整合-配置

使用 Google Guice Servlet 配置 Apache Shiro

Apache Shiro 使用手册Shiro 配置说明

shiro中@RequiresPermissions注解使用