나는 EJB 모듈과 웹 애플리케이션 모듈 (서블릿)을 가진 엔터프라이즈 애플리케이션을 가지고있다. URLConnection을 사용하여 EJB에서 서블릿 URL에 액세스하지만 보안을 위해 URL을 보호하려고합니다. 단일 사인 온 솔루션을 사용할 수 없기 때문에 사용자 이름과 암호를 사용하여 인증하지 않으므로 엔터프라이즈 응용 프로그램에서만 액세스 할 수있는 URL을 제한하는 방법이 필요합니다. 도와주세요.username 패스워드 인증을 사용하지 않고 서블릿 URL을 보호하기
답변
같은 시스템에서 실행되는 경우 정상적인 방법은 서블릿이 수행하는 비즈니스 작업을 다른 Java 클래스로 리팩토링하는 것이며, EJB와 서블릿 모두에서 가져 오거나 사용할 수 있습니다.
당신은 (예를 BASIC 인증에 사용) 당신이 당신의 서블릿 응용 프로그램을 배포하고 해당 사용자를 사용하여 응용 프로그램을 보호하기 위해 사용하는 응용 프로그램 서버에서 사용자 자격 증명을 만들 수 있습니다
이<security-constraint>
<web-resource-collection>
<web-resource-name>
Entire Application
</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>member</role-name>
</auth-constraint>
</security-constraint>
당신은 다음 EJB에서 인증을 사용할 수 있습니다 .
답변 해 주셔서 감사합니다. URL을 보호하고 EJB에서 인증하기 위해 Application Server에서 사용자를 생성하면 피하려는 EJB에서 사용자 이름과 암호를 하드 코딩해야합니다. – krish
많은 정보는 당신이 남겨 두었다된다
- 이 EJB 모듈에 의해서만 사용되는 서블릿, 아니면 그것은 또한 다른 클라이언트에 의해 사용된다?
- 서블릿과 EJB 모듈이 동일한 컨테이너에서 실행 중입니까? 같은 물리적 기계?
- 어떤 웹 서버/서블릿 컨테이너/J2EE 컨테이너를 사용하고 있습니까?
서블릿은 EJB 모듈에서만 사용, 그들은 동일한 시스템에 모두 경우, 당신은 단지 localhost
에서 연결을 허용하는 웹 컨테이너를 구성하고 EJB 모듈을 가리키는 데 사용하는 URL을 변경할 수 있습니다 공개 도메인 이름 또는 IP 주소 대신 localhost
에 있습니다.
다른 시스템에 있거나 서블릿이 다른 클라이언트에 의해 사용되는 경우, EJB 모듈을 어떻게 든 인증해야합니다. SSL 클라이언트 인증서 (this question 참조)를 사용하거나 EJB 모듈의 IP 주소로부터의 연결을 허용하도록 서블릿 컨테이너를 구성 할 수 있습니다. 액세스를 제어하는 서블릿 필터 사용이
EDIT
상당히 간단하다. 귀하의 경우 요청이 로컬 호스트에서오고 있는지 확인하고자합니다. 그렇지 않은 경우 승인되지 않은 메시지를 클라이언트에 다시 보냅니다. 여기
는 그렇게해야하는 매우 간단한doFilter
방법의 구현 :
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws ServletException, IOException
{
if (!request.getRemoteAddr().equals("127.0.0.1")) {
HttpServletResponse rsp = (HttpServletResponse) response;
rsp.sendError(HttpServletResponse.SC_FORBIDDEN, "You are not authorized to access this resource.");
}
chain.doFilter(request, response);
}
가 같은 것을 사용하여 web.xml
에 필터를 추가 다음
<filter>
<filter-name>AuthorizationFilter</filter-name>
<filter-class>com.foo.bar.AuthorizationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AuthorizationFilter</filter-name>
<servlet-name>RestrictedServlet</servlet-name>
</filter-mapping>
필터가 순서대로 실행됩니다 그들이 web.xml
에 나타나므로 인증 필터가 나열된 첫 번째 필터인지 확인하십시오.
이 모든 것을 말하면서, 저는 여기 BalusC와 동의합니다. 가능한 경우 EJB 모듈이 서블릿 호출을 작성하는 대신 직접 코드를 실행하도록 코드를 리팩터링해야합니다.
1. 문제의이 서블릿은 EJB에 의해 사용되지만 동일한 웹 애플리케이션의 다른 서블릿은 다른 클라이언트에 의해 사용됩니다. 2. 서블릿과 EJB가 동일한 컨테이너에서 실행되는 동일한 애플리케이션에 있음 3.이 애플리케이션은 웹 논리 서버 웹 응용 프로그램에는 (원격 컴퓨터에서) 다른 클라이언트가 액세스하는 다른 서블릿도 있습니다. 따라서 WLS는 프티 귤러 서블릿의 로컬 호스트에서만 연결을 허용하도록 구성 할 수 있습니까? 그렇다면 WLS에서 어떻게 구성합니까? – krish
서블릿별로 호스트 기반 액세스를 수행하도록 WLS를 구성 할 수 있는지 여부를 알지 못합니다. localhost에서만 수신 대기하도록 컨테이너를 구성 할 수 있지만 이는 컨테이너의 모든 서블릿과 웹 애플리케이션에 영향을 미칩니다. 서블릿 필터를 사용하여 단일 서블릿에 대한 액세스를 제어 할 수 있습니다. –
서블릿에 대한 액세스를 제어하는 서블릿 필터 (모든 샘플은 큰 도움이 될 것입니다)를 사용하는 방법을 알려주십시오. 이전에 필터를 살펴 봤지만 액세스를 제어 할 수있는 방법을 찾지 못했습니다. – krish
- 1. URL을 통한 패스워드 값
- 2. HttpUtility.UrlDecode를 사용하지 않고 URL을 이스케이프 처리합니다.
- 3. WCF 서비스 - UserName 인증을 사용하는 인증서 및 메시지 보안
- 4. HTTP 인증을 사용하지 않고 Apache Jersey에서 인증 하시겠습니까?
- 5. URL을 사용하지 않고 JNDI DataSource에서 zeroDateTimeBehavior를 설정하는 방법은 무엇입니까?
- 6. exemple.com/forum처럼 URL 재 작성 기능을 사용하지 않고 URL을 허용하십시오.
- 7. UserName 인증 웹 서비스
- 8. username, password, param1, param2 (문자열 배열)을 사용하여 컬을 사용하지 않고 PHP에서 http 게시 하시겠습니까?
- 9. 브라우저를 사용하지 않고 Flash를 사용하지 않고 글꼴을 포함시키는 방법은 무엇입니까?
- 10. grails에서 acegi로 멜로디 모니터링 보호하기
- 11. IIS를 사용하지 않고 GZIP?
- 12. jQuery를 사용하지 않고 stopPropagation
- 13. 사용하지 않고 파일 닫기
- 14. ? strtime을 사용하지 않고?
- 15. + 연산자를 사용하지 않고 추가
- 16. ; webrole을 사용하지 않고?
- 17. will_paginate activerecord를 사용하지 않고
- 18. WSAIoctl을 사용하지 않고 AcceptEx
- 19. 어떻게 root에서 WordPress를 설정하지만 여전히/username URL을 사용합니까?
- 20. 패스워드/키 보호
- 21. 플렉스 패스워드 필드 체크
- 22. 패스워드 강도 측정기
- 23. X509 멀티 - 패스워드 인증?
- 24. Microsoft.Web.Administration을 사용하여 폼 인증을 사용하지 않음
- 25. URL을 다시로드하지 않고 단편을 사용하지 않고 브라우저 URL과 페이지 콘텐츠를 변경하십시오.
- 26. 비밀번호 재미로 보호하기
- 27. 해적으로부터 소프트웨어 보호하기
- 28. 메모리가 변경되지 않도록 보호하기
- 29. grails 필터로 grails 멜로디 보호하기
- 30. 프로토콜 핸들러를 사용하지 않고 ClassLoader.getResource (String) 구현
일반 클래스를 다른 항아리로 리팩토링하려고 시도했지만 다른 클래스에 너무 많은 종속성이있는 것 같습니다. 그래도 여전히 실패하고 있으며 아직 조사 중입니다. 그러나 전체 jar 파일을 WEB-INF/lib에서 APP-INF/lib로 이동하여 EJB 및 webapp 모듈 모두에서 이러한 클래스에 액세스 할 수 있도록하는 것이 좋습니다. 클래스 로더와 관련된 문제가 있거나 컨테이너에 의한 서블릿 초기화와 관련된 문제가 있습니까? – krish
위의 의견에 대한 나의 질문을 별도의 질문으로해야하는지 알려주십시오. – krish