当前位置: 首页 > 知识库问答 >
问题:

Spring security 3.2:是否有自定义用户详细信息

扈沛
2023-03-14

我正在使用spring security 3.2、JSF2和Hibernate4。

我已经完成了3/4的工作:)但是我的身份验证系统还不起作用。

我有一个实现UserDetailsService的UserService,一个实现UserDetails的域类用户。

登录系统从不阻止用户访问安全页面,我尝试了数据库中不存在的用户名和密码...

谢谢你的帮助。

我有一个loginBean,当用户通过登录表单连接时,他正在尝试对用户进行身份验证:

public String login() {

        try {

            Authentication request = new UsernamePasswordAuthenticationToken(this.getUsername(), this.getPassword());
            Authentication result = authenticationManager.authenticate(request);
            SecurityContextHolder.getContext().setAuthentication(result);

        } catch (AuthenticationException e) { e.printStackTrace();}

        return "secured";
    }

我的spring security看起来像这样:

`<security:global-method-security jsr250-annotations="enabled" pre-post-annotations="enabled" secured-annotations="enabled" />

<security:http auto-config="true" use-expressions="true">
        <security:intercept-url pattern="/Admin" access="isAuthenticated()" />
        <security:form-login login-page="/login.xhtml" authentication-failure-url="/" >    </security:form-login>
    </security:http>

   <!-- User Data Access Object -->
   <beans:bean id="userDao" class="com.clb.genomic.lyon.dao.UserDaoImpl" >
        <beans:property name="sessionFactory" ref="sessionFactory"></beans:property>
   </beans:bean>

     <!-- User Business Object -->
   <beans:bean id="userBo" class="com.clb.genomic.lyon.bo.UserBoImpl" >
        <beans:property name="userDao" ref="userDao" />
   </beans:bean>


    <beans:bean id="login" class="com.clb.genomic.lyon.beans.LoginBean" scope ="request">
         <beans:property name="authenticationManager" ref="authenticationManager" /> 
     </beans:bean>

    <beans:bean id="standardPasswordEncoder" class="org.springframework.security.crypto.password.StandardPasswordEncoder"/>

   <security:authentication-manager alias="authenticationManager">
        <security:authentication-provider user-service-ref="userBo" >
            <security:password-encoder ref="standardPasswordEncoder"/>   
        </security:authentication-provider>
    </security:authentication-manager>`

这是出现的错误。。。

org.springframework.security.authentication.AuthenticationServiceException: 1
at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:109)
at org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:132)
at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:156)
at com.clb.genomic.lyon.beans.LoginBean.login(LoginBean.java:47).....

Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
    at com.clb.genomic.lyon.dao.UserDaoImpl.loadUserByUsername(UserDaoImpl.java:59)
    at com.clb.genomic.lyon.bo.UserBoImpl.loadUserByUsername(UserBoImpl.java:68)
    at com.clb.genomic.lyon.bo.UserBoImpl$$FastClassByCGLIB$$9ea98abf.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204).....

共有1个答案

鲁城
2023-03-14

堆栈跟踪中的异常显示您正在获取ArrayIndexOutOfBoundsException,并且似乎是从空数组中读取。

您还应该检查传递给loadUserByUsername()方法的值,以及该用户是否存在。

 类似资料:
  • 我对Java和Spring3(过去8年主要使用PHP)还很陌生。我已经使用spring security 3来处理所有默认的userDetails和userDetailsService,我知道我可以通过使用以下命令访问控制器中登录用户的用户名: 但有两个问题我想不通: > 我希望在用户登录时存储许多其他用户详细信息(如DOB、性别等),并在以后通过控制器进行访问。我需要做什么才能使创建的userD

  • 问题内容: 我正在尝试使用数据库表在Spring应用程序中应用安全性。 到目前为止,我的applicationContext-Security中有: 我对userDetailsS​​ervice的实现如下所示: 我的汇编程序如下所示: 现在,用户实体为: 我的userentitydao界面是: 实现是: 现在,当我尝试在tomcat上进行部署时,出现以下异常: 而不管我该怎么办,我不知道这是怎么回

  • 我有一个富网络(基于反应)前端应用程序,它将请求发送到后端资源服务器应用程序。请求在头中与JWT一起发送以进行身份验证。我的设置对Okta授权服务器进行身份验证,并从单独的服务中检索组/授权。 我将后端服务器设置为Springboot应用程序,带有Spring Security Oauth2资源服务器 有了这个设置,我可以使用JwkTokenStore实现来验证JWT令牌(它在内部使用JwkVer

  • 同时尝试Spring启动、安全性和数据。 我刚刚遇到了这种情况: 我在内存数据库中使用H2,并在启动时用liquibase和一个用户用用户名和密码对其进行加密。 现在我想让Spring Security性根据H2进行身份验证。为此,我有以下代码: 并且我实现了如下userDetails: 但我的测试一直失败 身份验证不应为空 尝试登录会给我 凭据错误 要使UserDetailsService的自定

  • 我有一个Keycloak连接器,它允许我通过SSO检索用户的用户名。我想使用这个用户名来认证用户,并在数据库中查找他的权限,并将这个用户权限注入到spring security中,以便能够使用它的功能。 我用自定义的UserDetailsService创建了一个自定义的authenticationProvider,但我一直面临的问题是,我每次都被重定向到spring security登录页面。我认

  • 本文向大家介绍微信小程序  自定义创建详细介绍,包括了微信小程序  自定义创建详细介绍的使用技巧和注意事项,需要的朋友参考一下 微信小程序 自定义创建,最近自己捣鼓微信小程序的东西,这里对自定义创建做一个简单的资料整理,也许可以帮助大家。  微信小程序  自定义创建 自定义创建与默认创建完全相同, 只是不要勾选quick start即可 淡定(不要看到报错就紧张, 一定要淡定) 看看它说了什么,