标签: shiro

Shiro:处理注释引发的异常

我使用Shiro注释来检查这样的授权:

@RequiresPermissions("addresses:list")
    public ModelAndView getCarrierListPage() {
        return new ModelAndView("addressList", "viewData", viewData);
    } 
Run Code Online (Sandbox Code Playgroud)

我的问题是:如果用户没有注释所需的权限,则抛出异常.如果发生异常,我宁愿将用户重定向到其他URL.我怎么做?

这是我的shiro过滤器配置:

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
    <property name="securityManager" ref="securityManager"/>
    <property name="loginUrl" value="/showLoginPage"/>
    <property name="filterChainDefinitions">
    </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc shiro

8
推荐指数
1
解决办法
1699
查看次数

如何从数据库中存储和使用shiro的盐

我在申请认证时使用shiro.我使用散列密码和盐,我将它们存储在我的数据库中,如下所示:

    private User createUserWithHashedPassword(String inName, String inFirstName, String inLastName, String inPassword){

    ByteSource salt  = randomNumberGenerator.nextBytes(32);

    byte[] byteTabSalt  = salt.getBytes();

    String strSalt = byteArrayToHexString(byteTabSalt);

    String hashedPasswordBase64 = new Sha256Hash(inPassword, salt, 1024).toBase64();

    return new User(inName,inFirstName,inLastName,hashedPasswordBase64,strSalt);
}
Run Code Online (Sandbox Code Playgroud)

我在我的数据库中使用String存储salt.现在在我的领域我想从数据库中获取我的数据,我使用了一个transactionnal服务.但是我的salt是一个Strong,所以我希望它以静态方法转回ByteSource类型:

ByteSource byteSourceSalt = Util.bytes(salt); //where the salt is a String
Run Code Online (Sandbox Code Playgroud)

但是当我创建我的SaltedAuthenticationInfo时,它不会授权.

我认为我的问题来自我的转换方法:

private String byteArrayToHexString(byte[] bArray){

        StringBuffer buffer = new StringBuffer();

        for(byte b : bArray) {
            buffer.append(Integer.toHexString(b));
            buffer.append(" ");
        }

 return buffer.toString().toUpperCase();    
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

java database salt shiro

8
推荐指数
1
解决办法
5934
查看次数

Shiro过期的会话处理

我的独立应用程序使用Shiro进行安全管理.我遇到了过期会话的问题.如果用户会话过期,当我尝试将用户重新登录时,我会收到以下异常.有人可以帮忙吗?

org.apache.shiro.session.UnknownSessionException: There is no session with id [d32af383-5f26-463f-a2f0-58a0e82c7890]
 at org.apache.shiro.session.mgt.eis.AbstractSessionDAO.readSession(AbstractSessionDAO.java:170)
 at org.apache.shiro.session.mgt.DefaultSessionManager.retrieveSessionFromDataSource(DefaultSessionManager.java:236)
 at org.apache.shiro.session.mgt.DefaultSessionManager.retrieveSession(DefaultSessionManager.java:222)
 at org.apache.shiro.session.mgt.AbstractValidatingSessionManager.doGetSession(AbstractValidatingSessionManager.java:118)
 at org.apache.shiro.session.mgt.AbstractNativeSessionManager.lookupSession(AbstractNativeSessionManager.java:105)
 at org.apache.shiro.session.mgt.AbstractNativeSessionManager.lookupRequiredSession(AbstractNativeSessionManager.java:109)
 at org.apache.shiro.session.mgt.AbstractNativeSessionManager.stop(AbstractNativeSessionManager.java:238)
 at org.apache.shiro.session.mgt.DelegatingSession.stop(DelegatingSession.java:127)
 at org.apache.shiro.session.ProxiedSession.stop(ProxiedSession.java:107)
 at org.apache.shiro.subject.support.DelegatingSubject$StoppingAwareProxiedSession.stop(DelegatingSubject.java:419)
 at org.apache.shiro.session.ProxiedSession.stop(ProxiedSession.java:107)
 at org.apache.shiro.subject.support.DelegatingSubject$StoppingAwareProxiedSession.stop(DelegatingSubject.java:419)

我用spring配置shiro

<bean id="securityManager" class="org.apache.shiro.mgt.DefaultSecurityManager"> 
    <property name="realm" ref="myRealm"/>
    <property name="sessionManager.globalSessionTimeout" value="3600000" />
</bean> 
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/> 
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">  
    <property name="staticMethod" value="org.apache.shiro.SecurityUtils.setSecurityManager"/> 
    <property name="arguments" ref="securityManager"/> 
</bean> 
Run Code Online (Sandbox Code Playgroud)

session-timeout shiro

8
推荐指数
1
解决办法
5149
查看次数

CacheManager属性已设置--Apache Shiro

如何在使用Apache shiro时设置cacheManager属性.在调试时,我得到了INFO,

80104 [1045903843@qtp-967078155-3] INFO org.apache.shiro.realm.AuthorizingRealm - No cache or cacheManager properties have been set.  Authorization cache cannot be obtained.
Run Code Online (Sandbox Code Playgroud)

我使用的是JSF2和Google Cloud SQL.

google-app-engine shiro

7
推荐指数
1
解决办法
7527
查看次数

Apache Shiro中的实例级访问控制

我发现了一个灵活的安全框架Apache Shiro.我使用Shiro成功实现了身份验证和授权.

该框架的一个吸引人的特性是基于实例的安全性.我刚从Shiro网站上复制了一些例子.

以下权限存储在数据库中.

printer:query:lp7200
printer:print:epsoncolor
Run Code Online (Sandbox Code Playgroud)

以下代码检查对于给定的打印机实例,当前经过身份验证的用户是否具有权限.

if ( SecurityUtils.getSubject().isPermitted("printer:query:lp7200") {
 // Return the current jobs on printer lp7200
}
Run Code Online (Sandbox Code Playgroud)

我的问题是"这是权限存储在数据库中的方式吗?" 有没有更好的方法来存储基于实例的权限?

请告诉我.

谢谢

java shiro

7
推荐指数
1
解决办法
2999
查看次数

集中式API提供商 - oAuth与否?

我对信息的溢出有点迷茫,我需要一些指导,以最好的方式支持只向受信任的客户提供API访问.

目前的环境:

我们目前有一个集中服务器,通过Apache Shiro处理用户身份验证/授权.

我们拥有内部API,可与内部服务器进行内部通信,以验证和管理令牌.(从而启用SSO).

我们的客户端应用程序和API之间的通信通过SSL保护.
使用基于令牌的身份验证.

目标:

我们的目标是允许第三方应用程序和API与我们的集中身份验证服务器进行通信.但我们主要担心的是网络钓鱼,因为我们只希望"有效"方与我们沟通,最好不要在第三方方面公开身份验证信息.

问题:

1-实现这种架构的最佳方法是什么?我们应该继续使用OAuth吗?如果是的话,有没有一种很好的方法将它与Shiro整合?

2- OAuth也会在移动应用程序上做得很好吗?(例如,除非应用程序受信任,否则限制对REST API的访问)

3-我是否有可以与Java一起使用的OAuth提供程序库,或者OAuth只是我必须自己实现的"标准"?(例如,实现RESTful API)

4- SSO是否可以轻松支持OAuth?

抱歉模糊的问题.我只需要一般的指导和建议.

java openid oauth shiro oauth-2.0

7
推荐指数
1
解决办法
3136
查看次数

Shiro,多重身份验证

有没有办法在Shiro中实现多因素身份验证?有人能给我一个如何实现这一点的提示吗?

有关更多详细信息:基本思想是,用户需要像往常一样使用用户名和密码登录,但在进行实际身份验证之前,用户还需要输入他作为SMS收到的一次性令牌.

谢谢!

authentication shiro two-factor-authentication

7
推荐指数
1
解决办法
1465
查看次数

undestanding secure/httponly cookie如何适用于Java应用程序

由于我目前对此的理解水平,我一直有一种行为,我只能认为是奇怪的.

我有apache版本:2.4.7在Ubuntu上代理通过AJP 1.3 tomcat 7.0.52.0运行一个spring应用程序(MVC)和apache shiro 1.2作为安全框架.

我在apache2.conf中设置了header条目,如下所示

Header always append X-Frame-Options SAMEORIGIN
Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
Run Code Online (Sandbox Code Playgroud)

如果使用以下任一或所有方法在tomcat端强制执行标志,我会有相同的行为:

  • conf/context.xml与contextHttpOnly =上下文标记的"true"属性
  • conf/server.xml,带有ajp或http的secure ="true"属性
  • 连接器WEB-INF/web.xml具有以下内容

    <cookie-config> <http-only>true</http-only> <secure>true</secure> </cookie-config>

在此之后发生的是,在/login存在安全和httponly标志时,在认证成功之后,在对服务器的任何调用期间,所有这些标志在应用内消失.一旦用户注销,标志将返回一个额外的标志:DeleteMejsessionid和RememberMe.

此/ login页面使用secure和httponly标志创建jsessionid jsessionid登录

验证成功后,2步auth jsessionid没有标志

2步认证

在帐户仪表板中也没有标志

帐户信息中心

但在注销时,旗帜又回来了 登出

我的问题是

1:这是通常的行为
2:如果这是实际行为,这是否意味着cookie在会话ID的整个生命周期中都是安全的?

java apache cookies tomcat shiro

7
推荐指数
1
解决办法
1073
查看次数

限制访问java-melody监控网址

有没有办法可以限制使用Shiro角色访问Grails中的Java-Melody插件生成的/监控URL?

更新:更多细节.这是没有问题的,所以大多数Grails的资源都是shiro.但是在java旋律插件的情况下,似乎在执行shiro过滤器之前执行旋律过滤器.这使得shiro无用.

有一些解决方案可以通过改变web.xml来解决这个问题,但这不是一个快速的问题,我(rdmueller)还没有设法让它工作.web.xml插件似乎也提供了一些帮助,但我不想添加另一个插件来保护一个插件.

网上发现的一些较旧的陈述表明,通过使用loadAfter此文件中的列表已经解决了这个问题:https://github.com/javamelody/grails-melody-plugin/blob/master/GrailsMelodyGrailsPlugin.groovy - 但是似乎这只适用于旧版本的Grails.

Update2:为了更容易提出解决方案,我创建了一个Grails 2.2.4示例:https://github.com/rdmueller/SO30739581

只需克隆项目,执行操作grailsw run-app并导航到

http://localhost:8080/SO30739581/dbdoc
Run Code Online (Sandbox Code Playgroud)

你将通过shiro获得一个登录屏幕.导航

http://localhost:8080/SO30739581/monitoring
Run Code Online (Sandbox Code Playgroud)

你会在没有登录的情况下获得旋律屏幕:-(

grails shiro java-melody

7
推荐指数
1
解决办法
2059
查看次数

Apache Shiro 1.4.0初始化

我安装了Apache Shiro 1.4.0,并按照这个官方教程进行设置.

当我尝试使用教程中的代码进行初始化SecurityUtilsSecurityManager:

Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
Run Code Online (Sandbox Code Playgroud)

我收到的消息IniSecurityManagerFactory现在已被弃用,有利于Shiro的Environment.

我找不到任何教程来演示如何初始化Shiro使用Environment,其文档没有多大帮助:

Environment实例封装了Shiro运行所需的所有对象.它本质上是一个"元"对象,从中可以为应用程序获取所有Shiro组件.

通常在解析Shiro配置文件时创建Environment实例.环境实例可以存储在应用程序认为必要的任何位置,并且可以从中检索实现安全行为可能需要的任何Shiro组件.

例如,通过Environment实例可访问的最明显的组件是应用程序的securityManager.

那么,我该如何使用这种新的初始化机制呢?

java apache security shiro

7
推荐指数
1
解决办法
828
查看次数