简体   繁体   中英

Spring secutity:custom userdetailService not visible No bean named 'myUserDetailsService' is defined

could somebody help me please, here is my pronleme with spring security my CustomuserDetailsService bean is not visible by the authentification provider as in the picture

1 is not ok mean while 2,3 and 4 say it should be

web.xml
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
    /WEB-INF/spring/root-context.xml,
    /WEB-INF/spring/spring-security.xml
    </param-value>
</context-param>  

<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- Processes application requests -->
<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

 <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>
</filter-mapping>

spring_security.xml

<http auto-config="true" use-expressions="true" >
    <!--<intercept-url pattern="/admin**" access="hasAnyRole('ROLE_USER', 'ROLE_ADMIN')" />-->
     <intercept-url pattern="/admin**" access="hasAnyRole('ROLE_USER', 'ROLE_ADMIN')" /> 
    <!-- <intercept-url pattern="/login*" access="hasRole('IS_AUTHENTICATED_ANONYMOUSLY')"/>  -->


    <!-- access denied page -->
    <access-denied-handler error-page="/403" />
    <form-login 
        login-page="/login" 
        default-target-url="/welcome"
        authentication-failure-url="/login?error" 
        username-parameter="username"
        password-parameter="password" />

    <logout logout-success-url="/login?logout" />
    <!-- enable csrf protection -->
    <csrf />
</http>

<authentication-manager>
     <authentication-provider user-service-ref="myUserDetailsService" >
        <password-encoder hash="plaintext" />    
    </authentication-provider>

 <!-- <authentication-provider>
    <user-service>
    <user name="mkyong" password="123456" authorities="ROLE_ADMIN,ROLE_USER" />
    <user name="junior" password="toto" authorities="ROLE_USER" />
    </user-service>
  </authentication-provider>-->
</authentication-manager>

myUserDetailssService

@Service("myUserDetailsService")
@Transactional(readOnly=true)
public class MyUserDetailsService implements UserDetailsService {

    @Autowired
    private UserService userDao;

    private static final Logger logger = LoggerFactory.getLogger(MyUserDetailsService.class);


    @Override
    public UserDetails loadUserByUsername(final String username) 
               throws UsernameNotFoundException {

        Users user = userDao.findByUserName(username);

        logger.info("myuserdetail user = ("+user.getPassword()+","+user.getUsername()+","+user.getEnabled()+")");

        Iterator iter = user.getUserRoleses().iterator();
        while(iter.hasNext()){
            UserRoles r = (UserRoles) iter.next();
            logger.info("role= "+r.getRole());
        }
        List<GrantedAuthority> authorities = buildUserAuthority(user.getUserRoleses());


        return this.buildUserForAuthentication(user, authorities);


    }


    // Converts com.psud.model.Users user to
    // org.springframework.security.core.userdetails.User

    private User buildUserForAuthentication(Users user, List<GrantedAuthority> authorities) {
        logger.info("myuserdetail2 user2 ");
        User u = new User(user.getUsername(), user.getPassword(),(( user.getEnabled() == 1)?true:false), 
                true, true, true, authorities);
        logger.info("myuserdetail2 user2");

        logger.info("myuserdetail2 user2 = "+u.getUsername());
        return u;
    }


    private List<GrantedAuthority> buildUserAuthority(Set<UserRoles> userRoles) {

        Set<GrantedAuthority> setAuths = new HashSet<GrantedAuthority>();

        // Build user's authorities
        for (UserRoles userRole : userRoles) {
            setAuths.add(new SimpleGrantedAuthority(userRole.getRole()));
        }

        List<GrantedAuthority> Result = new ArrayList<GrantedAuthority>(setAuths);

        return Result;
    }
}



root*.xml


    <!-- Root Context: defines shared resources visible to all other web components -->
    <bean id="test" class="com.psud.gestiondroit.Test">
    </bean>

    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">

        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/droits" />
        <property name="username" value="root" />
        <property name="password" value="" />
    </bean>

       <bean id="sessionFactory"
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
      <property name="dataSource" ref="dataSource" />
      <property name="packagesToScan" value="com.psud.gestiondroit.model" />

      <property name="hibernateProperties">
         <props>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
         </props>
      </property>
   </bean>  



   <bean id="transactionManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
      <property name="sessionFactory" ref="sessionFactory" />
   </bean>


servlet*.xml

    <!-- Enables the Spring MVC @Controller programming model -->
    <annotation-driven />
    <context:annotation-config />
    <tx:annotation-driven transaction-manager="transactionManager"/>

    <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
    <resources mapping="/resources/**" location="/resources/" />

    <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
    <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <beans:property name="prefix" value="/WEB-INF/views/" />
        <beans:property name="suffix" value=".jsp" />
    </beans:bean>

    <context:component-scan base-package="com.psud.gestiondroit" />
Hello gael this is my spring config files(root and servlet as generated by spring Tools on eclipse):

root*.xml


    <!-- Root Context: defines shared resources visible to all other web components -->
    <bean id="test" class="com.psud.gestiondroit.Test">
    </bean>

    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">

        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/droits" />
        <property name="username" value="root" />
        <property name="password" value="" />
    </bean>

       <bean id="sessionFactory"
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
      <property name="dataSource" ref="dataSource" />
      <property name="packagesToScan" value="com.psud.gestiondroit.model" />

      <property name="hibernateProperties">
         <props>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
         </props>
      </property>
   </bean>  



   <bean id="transactionManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
      <property name="sessionFactory" ref="sessionFactory" />
   </bean>


servlet*.xml

    <!-- Enables the Spring MVC @Controller programming model -->
    <annotation-driven />
    <context:annotation-config />
    <tx:annotation-driven transaction-manager="transactionManager"/>

    <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
    <resources mapping="/resources/**" location="/resources/" />

    <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
    <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <beans:property name="prefix" value="/WEB-INF/views/" />
        <beans:property name="suffix" value=".jsp" />
    </beans:bean>

    <context:component-scan base-package="com.psud.gestiondroit" />

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM