servlet에서는 security 관련해서 authentication, authorization, confidentiality, data integrity. 총 4가지의 주요 개념이 존재.
각각 하나하나 알아보겠음.
conf/directory
에 저장된다.(webapp 폴더 내부에 저장 안함.)<tomcat-users>
<role rolename="Guest"/>
<role rolename="Member"/>
<role username="Bill" password="coder" roles="Member, Guest" />
...
</tomcat-users>
DD에 이렇게 적으면 됨.
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
두가지로 나눠서 정의
1) Vendor-specific
<tomcat-users>
<role rolename="Admin"/>
<role rolename="Member"/>
<role rolename="Guest"/>
<user username="Annie" password="admin" roles="Admin, Member, Guest">
<user username="Diane" password="coder" roles="Member, Guest">
<user username="Ted" password="newbie" roles="Admin, Member, Guest">
</tomcat-users>
2) servlet-speicification
<security-role><role-name>Admin</role-name></security-role>
<security-role><role-name>Admin</role-name></security-role>
<security-role><role-name>Admin</role-name></security-role>
DD 내부
<web-app ...>
...
<security-constraint>
<web-resource-collection>
<web-resource-name>UpdateRecipes</web-resource-name>
<url-pattern>/Beer/AddRecipe/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>Admin</role-name>
<role-name>Member</role-name>
</auth-constraint>
</security-constraint>
</web-app>
<http-method>
명시 안해준 리소스들은 다 unconstraint다.<http-method>
명시를 안하면 그건 모든 Http method에 대해 constraint를 하겠다는 의미.<role-name>*</role-name>
과 <auth-constraint>
를 적지 않는 것은 동일한 의미.<auth-constraint></auth-constraint>
라고 해주면 아무것도 허용 안해준다는 의미.바깥에서 오는 모든 요청
에 대해서를 말한다. 내부에서는 사용 가능.isUserInRole()
를 적용 하면 된다.CONFIDENTIAL
사용<web-app ...>
...
<security-constraint>
<web-resource-collection>
<web-resource-name>Recipes</web-resource-name>
<url-pattern>/Beer/UdateRecipes/*</url-pattern>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>Member</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
</web-app>
<security-constraint>
는 request 이후에 일어나는 것에 대해 작용된다는 것을 인지하자.<security-constraint>
를 Container가 보고 어떻게 response를 넘겨줄 지 생각할 시점에 이미 request를 만들어서 보낸다는 것.<transport-guarantee>
NONE)<transport-guarantee>
CONFIDENTIAL)