2017-11-29 9 views
0

私はshiroフレームワークを探索しようとしています。認証は正常に動作しています。私は許可する際に問題に直面しています。私はshiro注釈@RequiresRolesを認可のために使用しています。注釈を使用していますが、指定した役割だけを許可するわけではありません。すべての役割を許可しています。私が試した下のコードを見つけてください。私はジャージーとシロを使用しています。@RequiresRoles注釈はshiroで動作しません

Javaコード: -

package com.somecompany.rest; 

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.core.Response; 

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

@Path("/test") 
public class HelloWorldService { 

     @GET 
     @Path("/{param}") 
     @RequiresRoles(value= {"admin_role"}) 
     public Response getMsg(@PathParam("param") String msg) { 

      String output = "Jersey say : " + msg; 
      System.out.println(SecurityUtils.getSubject().hasRole("admin_role")); 

     return Response.status(200).entity(output).build(); 

    } 

}

のWeb.xml

<servlet> 
      <servlet-name>jersey-serlvet</servlet-name> 
      <servlet-class> 
         com.sun.jersey.spi.container.servlet.ServletContainer 
        </servlet-class> 
      <init-param> 
       <param-name>com.sun.jersey.config.property.packages</param-name> 
       <param-value>com.somecompany.rest</param-value> 
      </init-param> 
      <load-on-startup>1</load-on-startup> 
     </servlet> 

     <servlet-mapping> 
      <servlet-name>jersey-serlvet</servlet-name> 
      <url-pattern>/rest/*</url-pattern> 
     </servlet-mapping> 


     <listener> 
      <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class> 
     </listener> 

     <filter> 
      <filter-name>ShiroFilter</filter-name> 
      <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class> 
     </filter> 

     <filter-mapping> 
      <filter-name>ShiroFilter</filter-name> 
      <url-pattern>/*</url-pattern> 
      <dispatcher>REQUEST</dispatcher> 
      <dispatcher>FORWARD</dispatcher> 
      <dispatcher>INCLUDE</dispatcher> 
      <dispatcher>ERROR</dispatcher> 
     </filter-mapping> 

のpom.xml

<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-server</artifactId> 
    <version>1.17</version> 
</dependency> 

<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-servlet</artifactId> 
    <version>1.17</version> 
</dependency> 

<dependency> 
    <groupId>org.apache.shiro</groupId> 
    <artifactId>shiro-core</artifactId> 
    <version>1.3.2</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.shiro</groupId> 
    <artifactId>shiro-web</artifactId> 
    <version>1.3.2</version> 
</dependency> 
<!-- Included commons logging for shiro --> 
<dependency> 
    <groupId>commons-logging</groupId> 
    <artifactId>commons-logging</artifactId> 
    <version>1.1.1</version> 
</dependency> 

<dependency> 
    <groupId>org.apache.shiro</groupId> 
    <artifactId>shiro-aspectj</artifactId> 
    <version>1.3.2</version> 
</dependency> 

shiro.ini

[users] 
root = root,root_role 
admin = admin,admin_role 
test = test,test_role 

[roles] 
admin = * 

[urls] 
# The 'urls' section is used for url-based security 
# in web applications. We'll discuss this section in the 
# Web documentation 

/rest/** = authcBasic 
+0

私はこのアノテーションを認識するための方法がないと思います。「DynamicFeature」を作成する必要があります。https://gist.github.com/caseyscarborough/f4266646f727fa9f7cc6 –

答えて

0

あなたのpom.xmlには、以下の史郎JAX-RSは、libのサポート欠けているように見える:プロジェクトにこの依存関係を追加した後

<dependency> 
    <groupId>org.apache.shiro</groupId> 
    <artifactId>shiro-jaxrs</artifactId> 
    <version>1.4.0</version> 
</dependency> 

を - @RequiresRolesをしなければなりません正しく機能します。

関連する問題