0

我正在使用带有 JSF Mojarra 2.1.18 和 Primefaces 3.5 的 Spring Security 3.0.6。

我创建了一个 LoginManagedBean,它注入了 Spring Security 的 AuthenticationManager。

 @ManagedBean
    @SessionScoped
    public class LoginManagedBean implements Serializable {

        private static final long serialVersionUID = 1L;

        private static transient final Log logger = LogFactory.getLog(LoginManagedBean.class);

        private LoginDTO login;

        private String username;

        private String password;

        @ManagedProperty(value = "#{authenticationManager}")
        private transient AuthenticationManager authenticationManager = null;

...

有用。但是如果登录失败,我将永远无法使用正确的值再次登录。我想我需要清除/重置 authenticationManager 对象,但我不知道如何。有什么建议么?提前致谢!

4

1 回答 1

1

你应该换一种方式。

1)定义身份验证管理器

<s:authentication-manager>
    <s:authentication-provider>
        <s:user-service>
            <s:user name="root" password="root"/>
        </s:user-service>
    </s:authentication-provider>
</s:authentication-manager>

2) 定义安全配置和表单登录

<s:http auto-config="true" use-expressions="true">
    <s:intercept-url pattern="/favicon.ico" access="permitAll"/>
    <s:intercept-url pattern="/resources/**" access="permitAll"/>
    <s:intercept-url pattern="/login**" access="isAnonymous"/>
    <s:intercept-url pattern="/pages/*" access="hasAuthority('ROLE_USER')"/>      
    <s:form-login login-page="/login.xhtml" default-target-url="/"
                  authentication-failure-url="/login.xhtml?loginFailed=true"/>
</s:http>

3)穿上@EnableWebMvc一些@Configuration

4)创建表单以login.xml将数据(字段j_usernamej_password)发布到/j_spring_security_check

5)添加过滤器web.xml

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>
于 2013-03-12T15:40:51.200 回答