1.配置资源时,如果有个事模糊配置,一个是精确配置,先匹配精确配置的。比如一个角色admin配置了*.jsp 访问所有的jsp,一个角色user是配置了user.jsp。此时,就算用户具有admin角色,也不可以访问user.jsp。必须具有user角色才可以。
上篇文章已经说了二种配置方式,
<login-config>
<!-- <auth-method>BASIC</auth-method> -->
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login1.jsp</form-login-page>
<form-error-page>/error.jsp</form-error-page>
</form-login-config>
</login-config>
<!-- <auth-method>BASIC</auth-method> -->
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login1.jsp</form-login-page>
<form-error-page>/error.jsp</form-error-page>
</form-login-config>
</login-config>
这二种配置方式,还要结合角色,用户在进行设置。
我们的应用程序只负责设置角色,并分配资源。具体的用户角色对应要到服务器上进行设置。下面是一个例子。定义了二种角色,admin和user
<security-role>
<role-name>admin</role-name>
</security-role>
<security-role>
<role-name>user</role-name>
</security-role>
<security-constraint>
<web-resource-collection>
<web-resource-name>Admin</web-resource-name>
<url-pattern>*.jsp</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>User</web-resource-name>
<url-pattern>/session.jsp</url-pattern>
<url-pattern>/login.jsp</url-pattern>
<http-method>GET</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>user</role-name>
</auth-constraint>
</security-constraint>
<role-name>admin</role-name>
</security-role>
<security-role>
<role-name>user</role-name>
</security-role>
<security-constraint>
<web-resource-collection>
<web-resource-name>Admin</web-resource-name>
<url-pattern>*.jsp</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>User</web-resource-name>
<url-pattern>/session.jsp</url-pattern>
<url-pattern>/login.jsp</url-pattern>
<http-method>GET</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>user</role-name>
</auth-constraint>
</security-constraint>
admin角色分配所有的jsp页面。user分配login和session页面。注意具有admin角色的用户是不能访问login和session的。
用户存在tomcat服务器的配置文件里tomcat-users.xml
<role rolename="admin"/>
<role rolename="user"/>
<user username="tomcat" password="tomcat" roles="admin,user"/>
<user username="user" password="user" roles="user"/>
<role rolename="user"/>
<user username="tomcat" password="tomcat" roles="admin,user"/>
<user username="user" password="user" roles="user"/>
这样就不用写任何代码 在访问以上页面是,浏览器都会进行验证。
当一次验证成功之后,知道关闭浏览器此次验证都有效。要像切换用户登录,必须关闭浏览器。
验证的原理:初次请求受保护的资源时,容器会检查是否包括Authorization表头,如果没有的话,则容器会进行响应401状态码与消息,以及www-authenticate表头给浏览器
就会要求用户输入名称和密码。
用户输入密码后,浏览器会将名称,面貌放在authoriztion表头中送出、容器会检查,是否包含authorization表头以及用户名密码是否正确。如果正确,则将数据发送给浏览器。
之后每次请求,都会包含那个表头,所以登陆有效期持续到关闭浏览器为止。
上面配置的http-method 默认情况下是所有的请求方式。当配置了这个之后只有配置了的请求方式才可以通过验证。比如上面的配置,如果通过post请求,就算用户名密码正确也请求不到数据。