首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你好-救救Shiro

你好-救救Shiro
EN

Stack Overflow用户
提问于 2015-04-10 00:14:10
回答 1查看 1.3K关注 0票数 0

我的应用程序没有准备好shiro.ini。我使用的是VRaptor框架,只是不是这个速度慢的shiro.ini。这是在类路径上的,并且不会读取。

代码语言:javascript
复制
public LoginController()  {
   Factory<SecurityManager> factory = new IniSecurityManagerFactory();
   SecurityManager securityManager = factory.getInstance();
   SecurityUtils.setSecurityManager(securityManager);
}
public boolean autenticar(String email, String password, Boolean rememberMe) throws NoSuchAlgorithmException, UnsupportedEncodingException {
    UsernamePasswordToken token = new UsernamePasswordToken(email, password);
    token.setRememberMe(true);
    Subject subject = SecurityUtils.getSubject();

    try {
        subject.login(token);

    } catch ( UnknownAccountException uae ) { 
        System.out.println(uae.getMessage());
    } catch ( IncorrectCredentialsException ice ) {
        System.out.println(ice.getMessage());
    } catch ( LockedAccountException lae ) {
        System.out.println(lae.getMessage());
    } catch ( ExcessiveAttemptsException eae ){
        System.out.println(eae.getMessage());
    }
    result.redirectTo(LoginController.class).admin();
    return false;
}

src/main/webapp/web-inf/shiro.ini

我使用一个名为vraptor的框架。我把shiro依赖项和.ini文件放在一起,它就是这个错误。

代码语言:javascript
复制
GRAVE: Servlet.service() for servlet [default] in context with path [/vraptor-andre] threw exception [net.vidageek.mirror.exception.ReflectionProviderException: Could not invoke method autenticar] with root cause
java.lang.IllegalStateException: Configuration error:  No realms have been configured!  One or more realms must be present to execute an authentication attempt.
    at org.apache.shiro.authc.pam.ModularRealmAuthenticator.assertRealmsConfigured(ModularRealmAuthenticator.java:161)
    at org.apache.shiro.authc.pam.ModularRealmAuthenticator.doAuthenticate(ModularRealmAuthenticator.java:264)
    at org.apache.shiro.authc.AbstractAuthenticator.authenticate(AbstractAuthenticator.java:198)
    at org.apache.shiro.mgt.AuthenticatingSecurityManager.authenticate(AuthenticatingSecurityManager.java:106)
    at org.apache.shiro.mgt.DefaultSecurityManager.login(DefaultSecurityManager.java:270)
    at org.apache.shiro.subject.support.DelegatingSubject.login(DelegatingSubject.java:256)
    at br.com.genius.shiro.controller.LoginController.autenticar(LoginController.java:55)

shiro.ini

[main]

代码语言:javascript
复制
authc.loginUrl = /login
jdbcRealm = br.com.genius.shiro.auth.MyCustomRealm
sha256Matcher = org.apache.shiro.authc.credential.Sha256CredentialsMatcher
sha256Matcher.storedCredentialsHexEncoded = false  
sha256Matcher.hashIterations = 1024  
jdbcRealm.credentialsMatcher = $sha256Matcher  
jdbcRealm.authenticationQuery = SELECT password, salt FROM User WHERE email = ?
jdbcRealm.permissionsLookupEnabled = true
jdbcRealm.userRolesQuery = select roleName from UserRole where email = ?
jdbcRealm.permissionsQuery = select permission from RolesPermission where    roleName = ?
ds = com.mysql.jdbc.jdbc2.optional.MysqlDataSource
ds.serverName = x.x.x.x
ds.user = xxxx
ds.password = xxxx
ds.databaseName = data
jdbcRealm.dataSource=$ds
authc.usernameParam = email
authc.passwordParam = password
authc.failureKeyAttribute = shiroLoginFailure
builtInCacheManager = org.apache.shiro.cache.MemoryConstrainedCacheManager
securityManager.cacheManager = $builtInCacheManager
securityManager.realms = $jdbcRealm
[urls]  
/login = authc
/logout = logout
/admin/** = user, roles[admin]
/guest/** = user, roles[guest]`

在shiro.ini中,当将其作为内部错误进行身份验证时,无法识别并且没有它的情况下会出现此错误

代码语言:javascript
复制
`The server encountered an internal error that prevented it from fulfilling this request.`


javax.enterprise.event.ObserverException
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
java.lang.reflect.Constructor.newInstance(Unknown Source)
java.lang.Class.newInstance(Unknown Source)

日志记录:org/apache/commons/ com.google.common.util.concurrent.ExecutionError: /LogFactory com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2197) com.google.common.cache.LocalCache.get(LocalCache.java:3932) com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3936) com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4806) java.lang.NoClassDefFoundError org.jboss.weld.util.cache.LoadingCacheUtilsorg.jboss.weld.util.cache.LoadingCacheUtils.getCastCacheValue(LoadingCacheUtils.java:80) org.jboss.weld.bean.proxy.ClientProxyProvider.getClientProxy(ClientProxyProvider.java:204) org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:727) org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:753)的.getCacheValue(LoadingCacheUtils.java:52)

EN

回答 1

Stack Overflow用户

发布于 2015-04-11 22:11:33

如果您的应用程序在类路径上查找shiro.ini,那么目录src/main/webapp/web不是放置它的正确路径。

看起来你在使用maven,如果是这样的话,它应该放在src/main/resources中。在生成的webapp中,它应该在WEB-INF/classes中结束

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29543726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档