mercredi 4 mars 2015

DatabasePasswordSecurerBean init-method not working in Spring Security


Caused by: java.lang.NullPointerException
at spring.board.security.DatabasePasswordSecurerBean$1.processRow(DatabasePasswordSecurerBean.java:47)
at org.springframework.jdbc.core.JdbcTemplate$RowCallbackHandlerResultSetExtractor.extractData(JdbcTemplate.java:1421)
at org.springframework.jdbc.core.JdbcTemplate$1QueryStatementCallback.doInStatement(JdbcTemplate.java:445)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:395)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:455)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:459)
at spring.board.security.DatabasePasswordSecurerBean.secureDatabase(DatabasePasswordSecurerBean.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1581)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1522)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
... 21 more


this error message...


I can't speak english very well but i have a problum so here ask ..



<security:http auto-config="true" use-expressions="true">
<security:intercept-url pattern="/login.do" access="permitAll" />
<security:intercept-url pattern="/home.do" access="hasRole('ROLE_USER')" />
<security:intercept-url pattern="/*" access="permitAll" />
<!-- access denied page -->
<security:access-denied-handler error-page="/error/403.do" />
<security:form-login
login-page="/login.do"
default-target-url="/home.do"
authentication-failure-url="/login.do?error"
authentication-success-handler-ref="loginSuccessHandler"
authentication-failure-handler-ref="loginFailureHandler" />
<security:remember-me key="ps-rmkey-paLLwApsifs24THosE62scabWow78PEaCh99Jus" token-validity-seconds="3600" data-source-ref="dataSource"/>
<security:logout invalidate-session="true" logout-success-url="/all-list.do" logout-url="/logout.do"/>
</security:http>

<security:authentication-manager alias="authenticationManager">
<security:authentication-provider user-service-ref="jdbcUserServiceCustom">
<security:password-encoder ref="passwordEncoder">
<security:salt-source ref="saltSource"/>
</security:password-encoder>
</security:authentication-provider>
</security:authentication-manager>

<bean id="jdbcUserServiceCustom" class="spring.board.security.CustomJdbcDaoImpl">
<property name="dataSource" ref="dataSource"/>
<property name="enableGroups" value="false" />
<property name="enableAuthorities" value="true" />
<property name="usersByUsernameQuery">
<value>select username,password,enabled,salt from users where username = ?</value>
</property>
<property name="authoritiesByUsernameQuery">
<value>select username, authority from authorities where username = ?</value>
</property>
</bean>

<bean id="loginSuccessHandler" class="spring.board.handler.LoginSuccessHandler"></bean>
<bean id="loginFailureHandler" class="spring.board.handler.LoginFailureHandler"></bean>

<bean id="saltSource" class="org.springframework.security.authentication.dao.ReflectionSaltSource">
<property name="userPropertyToUse" value="salt"/>
</bean>
<bean id="passwordEncoder" class="org.springframework.security.authentication.encoding.ShaPasswordEncoder"/>

<bean class="spring.board.security.DatabasePasswordSecurerBean" init-method="secureDatabase" depends-on="dataSource">
<property name="dataSource" ref="dataSource"/>
</bean>


this security-content.xml


and



public class DatabasePasswordSecurerBean extends JdbcDaoSupport {
@Autowired
private PasswordEncoder passwordEncoder;
@Autowired
private SaltSource saltSource;
@Autowired
private UserDetailsService userDetailsService;

public void secureDatabase() {


getJdbcTemplate().query("select username, password from users", new RowCallbackHandler(){
@Override
public void processRow(ResultSet rs) throws SQLException {
String username = rs.getString(1);
String password = rs.getString(2);
logger.info("ID: " + username + ", Password : " + password);


UserDetails user = new User(username, password, true, true, true, true, AuthorityUtils.NO_AUTHORITIES);//userDetailsService.loadUserByUsername(username);

String encodedPassword = passwordEncoder.encodePassword(password, saltSource.getSalt(user));
getJdbcTemplate().update("update users set password = ? where username = ?", encodedPassword, username);
logger.debug("Updating password for username: "+username+" to: "+encodedPassword);

}
});
}


}


why error ? i think .. maybe .. @Authowired didn't not working well


.......


help me ... !!! please..


Aucun commentaire:

Enregistrer un commentaire