本文介绍了Spring Security 4 和 PrimeFaces 5 AJAX 请求处理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
美好的一天.
我创建了一个 PrimeFaces 5 项目 (JSF 2.2),它使用 Spring Security 4.我试图使用启用单选的 p:dataTable 控件,它通过 ajax 调用更新 ap:pickList控制.
问题与Spring Security有关.如果我停用页面控件所在页面的安全性 (admin.faces),ajax 行为将正常工作.但是如果我激活安全性,我会得到 403 状态代码并且选择列表不会更新.我必须在这里指出,在激活安全性的情况下,如果我尝试进入管理页面,而没有先登录,我将被重定向到登录页面.
这是用于 Spring Security 的配置.为简单起见,删除了一些代码:
<beans:beans xmlns="http://www.springframework.org/schema/security"xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.1.xsdhttp://www.springframework.org/schema/securityhttp://www.springframework.org/schema/security/spring-security.xsd"><http pattern="/*.css" security="none"/><http pattern="/*.js" security="none"/><http use-expressions="true"><intercept-url pattern="/login.faces" access="permitAll"/><intercept-url pattern="/javax.faces.resource/**" access="permitAll"/><intercept-url pattern="/admin.faces" access="hasRole('Administrator')"/><表单登录登录页面=/login.faces"authentication-failure-url="/login.faces"/><退出/></http><authentication-manager alias="authManager"><authentication-provider ref="daoAuthenticationProvider"/></authentication-manager></beans:beans>
登录页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"xmlns:ui="http://java.sun.com/jsf/facelets"xmlns:f="http://java.sun.com/jsf/core"xmlns:h="http://java.sun.com/jsf/html"xmlns:p="http://primefaces.org/ui"><h:头><title>报告</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><meta name="_csrf" content="#{_csrf.token}"/><meta name="_csrf_header" content="#{_csrf.headerName}"/><link rel="stylesheet" type="text/css" href="stylesheet.css"/></h:head><身体><h:消息/><h:form id="登录表单"><input type="hidden" name="#{_csrf.parameterName}" value="#{_csrf.token}"/><p:panelGrid columns="2"><h:outputLabel value="用户:"/><h:inputText value="#{loginBean.user}" required="true"/><h:outputLabel value="密码:"/><h:inputSecret value="#{loginBean.password}" required="true"/><f:facet name="footer"><div style="text-align:right;"><h:commandButton type="submit" id="登录"action="#{loginBean.login}" value="登录"/>