>

요소 <security-constraint> 를 추가하면  내 웹 응용 프로그램의 web.xml 파일에있는 일부 URL의 경우 내 서블릿 컨테이너 (예 : Tomcat)는 해당 URL을 보호하고 인증되지 않은 사용자를 로그인 페이지로 리디렉션합니다.

하지만 서블릿 컨테이너는 인증 된 사용자의 요청을 어떻게 식별합니까?

예상 :

  • HTTP 요청에 쿠키가 있습니까?어떤 것?
  • HTTP 헤더?
  • 세션 인증 (세션 ID?)

특히 인증 된 사용자의 요청에서 Tomcat은 무엇을 찾습니까?

다음은 일반적인 튜토리얼에서 볼 수있는 예제에 따라 web.xml 파일의 일부입니다. 서블릿 컨테이너 (특히 Tomcat)는 요청에서 인증 된 사용자로부터 오는 것으로 식별하기 위해 무엇을 찾게됩니까?

<security-constraint>
  <display-name>Restricted GET To Employees</display-name>
  <web-resource-collection>
    <web-resource-name>Restricted Access - Get Only</web-resource-name>
    <url-pattern>/restricted/employee/*</url-pattern>
    <http-method>GET</http-method>
  </web-resource-collection>
  <auth-constraint>
    <role-name>Employee</role-name>
  </auth-constraint>
</security-constraint>
<login-config>
  <auth-method>FORM</auth-method>
  <realm-name>MyRealm</realm-name>
  <form-login-config>
    <form-login-page>/login/loginForm.jsp</form-login-page>
    <form-error-page>/login/loginError.jsp</form-error-page>
  </form-login-config>
</login-config>
<security-role>
  <role-name>Employee</role-name>
</security-role>


  • 답변 # 1

    서블릿 사양 (PDF)에 정의 된대로 JSESSIONID 쿠키가 클라이언트를 식별하기 위해 사용된다고 생각합니다.

    와이즈 비즈

    Session tracking through HTTP cookies is the most used session tracking mechanism and is required to be supported by all servlet containers. The container sends a cookie to the client. The client will then return the cookie on each subsequent request to the server, unambiguously associating the request with a session. The standard name of the session tracking cookie must be JSESSIONID, which must be supported by all 3.0 compliant containers.Containers may allow the name of the session tracking cookie to be customized through container specific configuration.

    로그인을 수행 한 후 Tomcat에서 인증이 수행되는 방식을 살펴보면  인증 정보를 캐시하는 메소드가 호출되며, 이는 org.apache.catalina.authenticator.AuthenticatorBase#register(org.apache.catalina.connector.Request, javax.servlet.http.HttpServletResponse, java.security.Principal, java.lang.String, java.lang.String, java.lang.String, boolean, boolean) 의 후속 요청에서 재사용됩니다.  자격 증명을 다시 제시하지 않고도 인증 된 사용자가 계속 진행할 수 있도록합니다.

    이것은 사용자가 유효한 세션을 갖도록 인증 될 필요는 없지만 ( org.apache.catalina.authenticator.AuthenticatorBase#checkForCachedAuthentication 에 의해 식별 됨)  쿠키), 일단 인증 정보가 로그인되면 세션에 캐시되고 바인딩되므로 해당 사용자가 새 요청을하면 응용 프로그램 서버는이를 인증 된 것으로 인식하고 보호 된 리소스에 대한 액세스를 허용합니다.

    JSESSIONID

  • 이전 python - 동일한 데이터 프레임에서 2 개의 다른 열 행 값을 기반으로하는 조건이 충족되는 경우 데이터 프레임에서 열의 행에 값 채우기
  • 다음 객체를 포함하는 TypeScript 타입 배열