我有一个定义了安全约束的 JSF2 (GlassFish 3.0) 应用程序(示例如下)。我的问题是,我有一个“注册”链接,当用户登录时不应访问该链接。
也就是说,如果他们尝试点击“/signup.jsf”,如果他们已登录,他们应该能够访问;所以如果他们有任何角色,他们应该not能够看到页面。
有没有办法做这样的“反向”安全约束?
欢迎任何建议,谢谢!
抢
我的应用程序中的示例约束,以防有用:
<security-constraint>
<display-name>profileForm</display-name>
<web-resource-collection>
<web-resource-name>profileForm</web-resource-name>
<url-pattern>/profileForm.jsf</url-pattern>
<http-method>DELETE</http-method>
<http-method>GET</http-method>
<http-method>POST</http-method>
<http-method>PUT</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>GENERAL</role-name>
<role-name>ADMIN</role-name>
<role-name>STAFF</role-name>
<role-name>INSTRUCTOR</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
只需创建一个Filter https://stackoverflow.com/tags/servlet-filters/info正是这样做的。
@WebFilter(urlPatterns={"/signup.jsf"})
public class SignupFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// ...
if (userIsLoggedIn) {
((HttpServletResponse) response).sendRedirect("already_loggedin.jsf");
} else {
chain.doFilter(request, response);
}
}
// ...
}
标准 JSF 实际上没有提供任何关于授权/身份验证的开箱即用的东西。 JSF 只是一个基于组件的 MVC 框架。
也可以看看:
- 我们的 Servlet 过滤器 wiki 页面 https://stackoverflow.com/tags/servlet-filters/info
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)