在JSF2 webapp中处理"未经检查"的异常的最佳方法是什么?
目前,我让它们流到servlet容器,然后我(通过web.xml文件)重定向到显示友好消息和异常信息的jsp错误页面.
使用"自定义异常处理程序"处理它们会更好(就像Ed Burns在"JSF 2.0 - 完整参考"一书中所说的那样).
在这两种情况下("web.xml"或"异常处理程序"):我是否必须重定向到jsp页面而不是facelet页面?(因为异常可能是由jsf问题本身引起的,并且可能导致循环).或者我可以重定向到facelet页面吗?重定向到jsp页面的缺点是必须配置jsf应用程序以接纳jsp和facelets(只有facelet页面会更"干净").
最后,另一个问题:"自定义异常处理程序"也处理"已检查"异常?目前,我在托管bean中处理它们(捕获它们并在应用程序页面中显示facesmessage).
我在JSF2 webapp中使用Spring Security 3.
我有一个安全规则来提供会话超时:
<session-management invalid-session-url="/faces/paginas/autenticacion/login.xhtml?error=1" />
Run Code Online (Sandbox Code Playgroud)
因此,当会话过期并且用户单击任何链接时,他将被重定向到登录页面.在此页面中,我检查错误参数,并向用户显示一条消息,说明会话已过期.
但我有两个问题:
(1)当我第一次启动应用程序(它试图显示主页)时,我被重定向到登录页面,说会话已经过期.我认为这可能会发生,因为第一次运行应用程序时,会话是新的,Spring Security可能"认为"他已经过期(不区分新会话和超时).
(2)如果匿名用户的会话已过期(尚未通过身份验证),我也会被重定向到登录页面超时.对于未经身份验证的用户,我不希望出现此行为,我只想查看经过身份验证的用户的超时.
我怎样才能解决这两个问题呢?
先感谢您.
我有啊:数据表显示行列表,每行的字段是输入字段.
我在表格前面渲染一个"添加行"按钮,在表格的每一行上都有一个"删除行"按钮.
烘焙bean是viewScoped,按钮添加/删除辅助bean中java列表中的元素,然后返回到同一视图.
我在按钮中将immediate属性设置为"true",以便在添加或删除行时不验证输入字段.
一切正常但只有一件事:输入文件的值被清除.我认为视图保持值,因为bean是viewScoped.
如何在不触发验证的情况下实现添加/删除行,并保留用户在表单中键入的值?
我的看法:
<h:form>
<h:commandButton value="Añadir Fila" immediate="true" action="#{tablaController.addRowAction}" />
<h:dataTable value="#{tablaController.lista}" var="fila" cellpadding="0" cellspacing="0" border="1">
<f:facet name="header">TABLA</f:facet>
<h:column>
<f:facet name="header"><h:outputLabel value="NOMBRE" /></f:facet>
<h:inputText id="nom" value="#{fila.nombre}" />
<h:message for="nom" class="msjError" />
</h:column>
<h:column>
<f:facet name="header"></f:facet>
<h:commandButton value="Quitar Fila" immediate="true" action="#{tablaController.removeRowAction(fila)}" />
</h:column>
</h:dataTable>
</h:form>
Run Code Online (Sandbox Code Playgroud)
我的支持豆:
@ManagedBean(name="tablaController")
@ViewScoped
public class TablaController {
private List<Fila> lista;
...
public TablaController() { }
...
@PostConstruct
public void init() {
this.lista = new ArrayList<Fila>();
for (int i=0; i<5; i++) {
Fila …Run Code Online (Sandbox Code Playgroud) 我在我的jsf2网络应用程序中使用spring security 3.
如何在登录表单中显示错误的凭据消息,而不将get param?login_error附加到authenticated-fail-login-page?
我尝试过使用像本教程这样的阶段监听器:
http://tutorials.slackspace.de/tutorial/Custom-login-page-with-JSF-and-Spring-Security-3
但它不起作用.
没有preRenderView监听器.
并且既不检查弹簧安全性最后一个异常以呈现消息.
有任何想法吗?
更新:
我的登录页面:
<f:metadata>
<f:viewParam name="error" value="#{autenticacionController.error}" />
<f:event listener="#{autenticacionController.comprobarAuthException}" type="preRenderView" />
</f:metadata>
<h:messages globalOnly="true" layout="table" />
<h:form id="formLogin" prependId="false">
<h:outputLabel for="j_username" value="Usuario:" />
<h:inputText id="j_username" value="#{autenticacionController.administrador.login}" />
<h:outputLabel for="j_password" value="Contraseña:" />
<h:inputSecret id="j_password" value="#{autenticacionController.administrador.password}" />
<h:commandButton value="Entrar" action="#{autenticacionController.loginAction}" />
<h:commandButton value="Cancelar" immediate="true" action="#{autenticacionController.cancelarAction}" />
</h:form>
Run Code Online (Sandbox Code Playgroud)
我的托管bean:
@ManagedBean(name="autenticacionController")
@RequestScoped
public class AutenticacionController extends BaseController {
//entidad "administrador" contra el que validar los campos del form login
private Administrador administrador = …Run Code Online (Sandbox Code Playgroud) 我正在尝试自定义Spring Security的会话管理过滤器,但是我得到的错误是我的过滤器和默认过滤器具有相同的'order'值(虽然<session-managent>我的<http>配置中没有任何内容,但我有autoconfig =是的,正如Spring Security在其文档中所说的那样).
这是我的Spring Security配置:
<http auto-config="false" use-expressions="true">
<custom-filter position="SESSION_MANAGEMENT_FILTER" ref="filtroGestionSesion" />
<intercept-url pattern="/resources/**" filters="none"/>
<intercept-url pattern="/faces/javax.faces.resource/**" filters="none"/>
<intercept-url pattern="/faces/inicio.xhtml" access="permitAll"/>
<intercept-url pattern="/faces/paginas/autenticacion/login.xhtml*" access="permitAll"/>
<intercept-url pattern="/faces/paginas/administracion/**" access="isAuthenticated()"/>
<intercept-url pattern="/faces/paginas/barco/**" access="isAuthenticated()"/>
<intercept-url pattern="/faces/paginas/catalogo/**" access="permitAll"/>
<intercept-url pattern="/faces/paginas/error/**" access="permitAll"/>
<intercept-url pattern="/faces/paginas/plantillas/**" access="permitAll"/>
<intercept-url pattern="/**" access="denyAll" />
<form-login login-processing-url="/j_spring_security_check"
login-page="/faces/paginas/autenticacion/login.xhtml"
default-target-url="/faces/paginas/administracion/inicioAdmon.xhtml"
always-use-default-target="true"
authentication-failure-url="/faces/paginas/autenticacion/login.xhtml?error=authentication" />
<logout logout-url="/j_spring_security_logout"
logout-success-url="/faces/inicio.xhtml"
invalidate-session="true" />
</http>
<global-method-security pre-post-annotations="enabled" />
<authentication-manager>
<authentication-provider>
<user-service>
<user name="myuser" password="myuser" authorities="" />
</user-service>
</authentication-provider>
</authentication-manager>
<beans:bean id="filtroGestionSesion" class="springSecurity.FiltroGestionSesion">
<beans:constructor-arg ref="securityContextRepository" …Run Code Online (Sandbox Code Playgroud) 也许这个问题是矛盾的,但在 DDD 中从用例开始开发,然后开发支持这些服务的领域模型是否正确?
如果设计是由领域驱动的(如 DDD 所说),那么假设您首先开发领域模型(通过理解问题领域并使用泛在语言),然后开发应用层(用例)使用域。
然而,在 DDD 中,您似乎首先从用例(或用户故事)开始,然后开发域模型。