我正在Wildfly 17上部署Java EE 8 Web应用程序。我想使用Keycloak作为我的身份/身份验证提供程序。此外,我的应用程序被设计为多租户,其中Keycloak客户端配置基于HTTP标头动态加载。我已经下载了Keycloak-Wildfly适配器,并相应地修补了我的Wildfly配置。目前,我正在尝试通过保护Servlet
并尝试通过浏览器访问它来证明我的配置正确。期望防止我访问servlet,将调用我的自定义KeycloakConfigResolver,加载Keycloak配置,最终将重定向到Keycloak进行身份验证。但实际上,这不是我所看到的。
我在web.xml
文件中添加了以下内容,以表明我正在使用Keycloak进行登录支持...
<login-config>
<auth-method>KEYCLOAK</auth-method>
<realm-name>KEYCLOAK</realm-name>
</login-config>
<security-role>
<role-name>*</role-name>
</security-role>
从那里,我创建了一个简单的Servlet
,其中包含几个打印语句,以查看是否已通过身份验证。看起来像这样...
@WebServlet("/myservlet")
public class MyServlet extends HttpServlet {
/*
*
* (non-Javadoc)
*
* @see
* javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest,
* javax.servlet.http.HttpServletResponse)
*/
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Principal principal = request.getUserPrincipal();
boolean admin = request.isUserInRole("admins");
boolean user = request.isUserInRole("users");
boolean moderator = request.isUserInRole("moderators");
System.out.println("principal=" + principal);
}
}
很显然,第一次点击将打印出principal=null
。因此,我在上面添加了以下注释,希望这将阻止我访问servlet,并将开始将我重定向到Keycloak进行身份验证...
@RolesAllowed({ "users" })
但是,那什么也没做。我仍然看到principal=null
正在打印。因此,我将其删除并开始使用此批注...
@ServletSecurity(value = @HttpConstraint(rolesAllowed = { "users" }), httpMethodConstraints = {
@HttpMethodConstraint(value = "GET", rolesAllowed = { "users" }) })
不过,我看到principal=null
正在打印。在应用程序级别或Servlet级别,我的配置中显然缺少了 something 。我只是不确定。有什么建议吗?