我发现了很多例子,但问题是它们都JSP/JSF
用作视图。问题是它们总是用作用j_username
户名输入 ID 和j_password
密码 ID。我发现这些名称是标准名称。Primefaces 不允许我为p:inputtext
组件命名。你有什么解决办法吗?
这是一个例子: http: //krams915.blogspot.com/2012/01/spring-security-31-implement_13.html
我发现了很多例子,但问题是它们都JSP/JSF
用作视图。问题是它们总是用作用j_username
户名输入 ID 和j_password
密码 ID。我发现这些名称是标准名称。Primefaces 不允许我为p:inputtext
组件命名。你有什么解决办法吗?
这是一个例子: http: //krams915.blogspot.com/2012/01/spring-security-31-implement_13.html
j_username
并且j_password
只是 Spring Security 中的默认值。您可以按预期自定义这些名称。为此,您设置password-parameter
和的值username-parameter
如下:
<security:form-login login-page="/login.html"
default-target-url="/welcome.html"
always-use-default-target="true"
authentication-failure-url="/login.html?error"
password-parameter="your_value"
username-parameter="your_value"/>
我正在使用 Spring Security 3.1。对于另一个版本,配置可能类似于上面。
尝试使用指向登录控制器 URL 的普通 HTML 表单而不是 Primefaces 标签:
<form name='f' action="/j_spring_security_check" method='POST'>
<input type='text' name='j_username' value=''>
<input type='password' name='j_password' />
<input name="submit" type="submit" value="submit" />
</form>
您可以直接发布到j_spring_security_check
,但有时以编程方式将两者结合起来可能会很方便。
<p:commandButton value="Login" action="#{loginController.login}" ajax="false">
<h:inputText id="j_username" required="true" />
<h:inputSecret id="j_password" required="true" />
与 hxmlns:h="http://java.sun.com/jsf/html"
在您的登录控制器中:
ExternalContext context = FacesContext.getCurrentInstance()
.getExternalContext();
RequestDispatcher dispatcher = ((ServletRequest) context.getRequest()).getRequestDispatcher("/j_spring_security_check");
dispatcher.forward((ServletRequest) context.getRequest(),
(ServletResponse) context.getResponse());