我有一个表示安全内容的servlet,注释如下:
@WebServlet(name = "GreetingServlet", urlPatterns = {"/greeting"})
@ServletSecurity(
@HttpConstraint(
rolesAllowed = {"TutorialUser"} ) )和web.xml如下:
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>hello2_basicauth</display-name>
<!--other servlet names and mappings are defined via annotations-->
<security-role>
<role-name>TutorialUser</role-name>
</security-role>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>file</realm-name>
</login-config>
</web-app>当我第一次进入/greeting路径时,出现了用户名/密码提示(早些时候我使用add_user.sh为Jboss创建了用户)。输入正确的凭据后,我能够看到servlet提供的安全内容。
现在的问题是,每当我再次访问/greeting路径时,就不再要求我提供凭据。
我在注销servlet下面实现了:
@WebServlet(name = "Logout", urlPatterns = "/logout")
@ServletSecurity(
@HttpConstraint(
rolesAllowed = {"TutorialUser"} // 403 if user not present ... // default add user to file realm and assign to TutorialUser group
)
)
public class Logout extends HttpServlet {
public static final Logger logger = Logger.getLogger(Logout.class.getCanonicalName());
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
logger.info("---- Principal = " + request.getUserPrincipal());
request.logout();
logger.info("---- Principal = " + request.getUserPrincipal());
}
}但是,它不起作用(我仍然可以访问/greeting的资源,而无需登录)。控制台在访问/logout时记录这一点。
INFO [servlets.Logout] (http--127.0.0.1-8080-4) ---- Principal = duke3
INFO [servlets.Logout] (http--127.0.0.1-8080-4) ---- Principal = null 发布于 2013-11-17 13:31:48
是的,这就是基本身份验证的工作方式。大致顺序是:
我们能做些什么?
https://stackoverflow.com/questions/20025644
复制相似问题