2011-01-27 2 views
1

우리는 @Webmethod 주석을 통해 웹 서비스로 메소드 중 일부를 노출하는 일부 Staleless EJB (EJB3)를 GlassFish 2 서버에 배포했습니다.GlassFish 2에서 webservices를 보호하는 방법은 무엇입니까?

이제 인증 된 클라이언트 만 호출 할 수 있도록 이러한 웹 서비스 메서드를 보호하려고합니다. 이것을 달성하기위한 좋은 방법은 무엇입니까?

당신은 보안 주석을 사용하는 방법 또는 전체 콩에 액세스 할 역할 목록 권한을 부여 할 수 있습니다
+0

인증 된 클라이언트를 말하면 클라이언트 디지털 인증을 의미합니까? – Cratylus

+0

예, 디지털 인증서가 최적 일 것입니다. – Sylar

+0

보안되지 않아야하는 다른 URL의 동일한 포트에서 실행되는 다른 서비스가 있기 때문에 문제는 SSL을 사용하여 웹 서비스 포트를 보호 할 수 없다는 것입니다. – Sylar

답변

5

좋은 목사님이 말했다. 아래 예제는 인증을 위해 파일 영역을 사용합니다.

@Stateless 
@WebService(name = "MyAppServices") 
@RolesAllowed({"user"}) 
public class ItemEJB { 
    ... 
} 

는 또한 예를 들어, 태양의 ejb-jar.xml의 필요합니다

<sun-ejb-jar> <security-role-mapping> <!-- as defined in @RolesAllowed --> <role-name>user</role-name> <!-- glassfish group created in file realm --> <group-name>user</group-name> </security-role-mapping> <enterprise-beans> <ejb> <ejb-name>ItemEJB</ejb-name> <webservice-endpoint> <!-- equivalent to name attribute of @WebService --> <port-component-name>MyAppServices</port-component-name> <login-config> <auth-method>BASIC</auth-method> <realm>file</realm> </login-config> </webservice-endpoint> </ejb> </enterprise-beans> 

글래스 피쉬의 파일 영역에서 그룹의 창조

사소한 (관리 콘솔)입니다. 그러나 자신 만의 맞춤 영역 및 로그인 모듈을 만들 수 있습니다

3

:

일예를

@Stateless 
@RolesAllowed({"user", "employee", "admin"}) 
public class ItemEJB { 
    ... 
} 

자세한 내용은 아래 링크를 참조하십시오 :

1

http://java.sun.com/developer/technicalArticles/J2EE/security_annotation/ 이제 우리는 단지 그것을 호출 할 수 있습니다 클라이언트를 인증 그래서 이러한 웹 서비스 방법을 확보하고자합니다.

이것은 ssl과 관련이 없다고 가정합니다. 그래서 :
1) 클라이언트 로그인 사용자 이름과 패스워드
2) 사용자 이름과 패스워드가 정확하다면 (DB에 저장되어있는 경우), 사용자는 로그인 한 것으로 간주되고 응답시 고유 세션 토큰 사용자 이름과 암호)는 웹 서비스에 의해 생성되고 응답으로 되돌려 보내집니다.
이 토큰은 타임 스탬프 정보와 사용자 이름 및 암호와 함께 저장됩니다.
3) 요청이 클라이언트에 의해 전송 될 때마다 토큰은 다른 매개 변수와 함께 반송됩니다. 토큰이 유효한 경우 요청이 인증 된 클라이언트에서 제공됨을 의미합니다.
4) 모든 요청에는 나머지 매개 변수와 함께 세션 토큰이 있어야합니다.
인증되지 않은 클라이언트에는 보낼 토큰이 없습니다.

관련 문제