2012-05-04 3 views
1

Glassfish v3에서 작동하는 기본 인증을 사용하여 Java EE 저지 편안한 서비스를 얻으려고합니다.Java Restful Service를 통한 인증

현재 서비스에서 사용자를 인증하라는 메시지가 표시되고 올바른 자격 증명이 제공되면 영역에있는 모든 사용자가 역할에 따라 서비스에 액세스 할 수 있습니다. 관리자 역할 액세스 만 허용해야합니다.

또한 @RolesAllowed 주석을 사용하여 제한하려고하면이 또한 무시됩니다.

나머지 코드 :

@Path("/file") 
public class FileResource { 

    @GET 
    @Produces("application/json") 
    public Response getJson() { 
     String result = "{\"data\":\"test\"}"; 
     return Response.ok(result, MediaType.APPLICATION_JSON).build(); 
    } 

    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    @RolesAllowed("admin") 
    public Response getOther() { 
     String result = "{\"employee\":[{\"email\":\"[email protected]\",\"firstName\":\"John\",\"lastName\":\"Doe\"},{\"email\":\"[email protected]\",\"firstName\":\"Mary\",\"lastName\":\"Major\"}]}"; 
     return Response.ok(result, MediaType.APPLICATION_JSON).build(); 
    } 
} 

은 web.xml 코드 :

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    id="WebApp_ID" version="3.0"> 
    <display-name>org.examples.secure</display-name> 
    <welcome-file-list> 
     <welcome-file>index.xhtml</welcome-file> 
    </welcome-file-list> 

    <servlet> 
     <servlet-name>JAX-RS Servlet</servlet-name> 
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet> 
     <servlet-name>Faces Servlet</servlet-name> 
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>JAX-RS Servlet</servlet-name> 
     <url-pattern>/rs/*</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>*.xhtml</url-pattern> 
    </servlet-mapping> 

    <login-config> 
     <auth-method>BASIC</auth-method> 
     <realm-name>DBRealm</realm-name> 
    </login-config> 

    <security-constraint> 
     <web-resource-collection> 
      <web-resource-name>users</web-resource-name> 
      <url-pattern>/rs/*</url-pattern> 
     </web-resource-collection> 
     <auth-constraint> 
      <description/> 
      <role-name>admin</role-name> 
     </auth-constraint> 
     <!-- <user-data-constraint> 
      <description>SSL</description> 
      <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
     </user-data-constraint> --> 
    </security-constraint> 

    <security-role> 
     <role-name>admin</role-name> 
    </security-role> 

</web-app> 

태양-web.xml의 코드 : 어떤 도움이

을 감상 할 수있다

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Servlet 2.5//EN" "http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd"> 
<sun-web-app error-url=""> 
    <context-root>/org.examples.secure</context-root> 
    <security-role-mapping> 
    <role-name>admin</role-name> 
    <group-name>admin</group-name> 
    </security-role-mapping> 
    <class-loader delegate="true"/> 
    <jsp-config> 
    <property name="keepgenerated" value="true"> 
     <description>Keep a copy of the generated servlet class java code.</description> 
    </property> 
    </jsp-config> 
</sun-web-app> 

+0

무엇이 문제입니까? – ant

+0

1. web.xml에 정의 된 역할은 아무런 영향을 미치지 않습니다 (사용자가 서비스에 액세스 할 수있는 영역에 정의되어있는 한 - 현재 해당 역할을 관리 역할로 제한하려고합니다). 2. @RolesAllowed 주석에도 동일하게 적용됩니다. –

답변

0

를 추가해야합니다. @RolesAllowed 어노테이션이 작동하려면 웹 애플리케이션에을 연결하십시오 (링크 된 javadoc을 참조하십시오).