java - org.springframework.security.core.userdetails.User cannot be cast to MyUserDetails -


i getting class cast exception when implement user class of spring security. want add few additional details in myuserdetails (id) not able result.

this question answered here 2 getting error, don't know missing.

below code :

securityconfig.java:

@configuration @enablewebsecurity public class securityconfig extends websecurityconfigureradapter {      @autowired     @qualifier("authenticationprovider")     authenticationprovider authenticationprovider;      @autowired     datasource datasource;      @autowired     public void configauthentication(authenticationmanagerbuilder auth)             throws exception {          auth.jdbcauthentication()                 .datasource(datasource)                 .passwordencoder(passwordencoder())                 .usersbyusernamequery(                         "select username,password, enabled users username=?")                 .authoritiesbyusernamequery(                         "select username, role user_roles username=?");      }      @bean     public passwordencoder passwordencoder() {         passwordencoder encoder = new bcryptpasswordencoder();         return encoder;     }      @override     protected void configure(httpsecurity http) throws exception {          http.headers().cachecontrol().and().xssprotection().and()                 .frameoptions().and();          http.authorizerequests()                 .antmatchers("/sadmin/**")                 .access("hasrole('role_sadmin')")                 .antmatchers("/admin/**")                 .access("hasrole('role_admin') or hasrole('role_sadmin')")                 .antmatchers("/")                 .access("hasrole('role_admin') or hasrole('role_sadmin') or hasrole('role_user')")                 .and().formlogin()                 .loginprocessingurl("/j_spring_security_check")                 .loginpage("/login").failureurl("/login?error")                 .usernameparameter("username").passwordparameter("password")                 .and().logout().logouturl("/j_spring_security_logout")                 .logoutsuccessurl("/login?logout").and().exceptionhandling()                 .accessdeniedpage("/403").and().csrf();          // session management url reference         // https://github.com/spring-projects/spring-security-javaconfig/blob/master/spring-security-javaconfig/src/test/groovy/org/springframework/security/config/annotation/web/configurers/namespacesessionmanagementtests.groovy     } 

myuserdetails.java:

public class myuserdetails extends user {     private int id;      public myuserdetails(string username, string password, boolean enabled,             boolean accountnonexpired, boolean credentialsnonexpired,             boolean accountnonlocked,             collection<? extends grantedauthority> authorities) {         super(username, password, enabled, accountnonexpired,                 credentialsnonexpired, accountnonlocked, authorities);      }     // getter setter .... } 

customuserdetailsservice.java:

@service("userdetailsservice") public class customuserdetailsservice extends jdbcdaoimpl{     @override     protected list<userdetails> loadusersbyusername(string username) {         return getjdbctemplate().query(super.getusersbyusernamequery(), new string[] { username },                 new rowmapper<userdetails>() {                     public userdetails maprow(resultset rs, int rownum) throws sqlexception {                         string username = rs.getstring("username");                         string password = rs.getstring("password");                         boolean enabled = rs.getboolean("enabled");                         boolean accountnonexpired = rs.getboolean("accountnonexpired");                         boolean credentialsnonexpired = rs.getboolean("credentialsnonexpired");                         boolean accountnonlocked = rs.getboolean("accountnonlocked");                         int id = rs.getint("id");                          myuserdetails myuserdetails = new myuserdetails(username, password, enabled, accountnonexpired, credentialsnonexpired,                                 accountnonlocked, authorityutils.no_authorities);                          myuserdetails.setid(id);                         return myuserdetails;                     }                  });     }      @override     protected userdetails createuserdetails(string username, userdetails userfromuserquery,             list<grantedauthority> combinedauthorities) {         string returnusername = userfromuserquery.getusername();          if (!isusernamebasedprimarykey()) {             returnusername = username;         }          final myuserdetails myuserdetails = new myuserdetails(returnusername, userfromuserquery.getpassword(), userfromuserquery.isenabled(),                 userfromuserquery.isaccountnonexpired(), userfromuserquery.iscredentialsnonexpired(),                 userfromuserquery.isaccountnonlocked(), combinedauthorities);          myuserdetails.setid(((myuserdetails) userfromuserquery).getid());         return myuserdetails;     } } 

code myuserdetails:

myuserdetails userdetails = (myuserdetails) securitycontextholder.getcontext().getauthentication().getprincipal(); 

pom.xml:

<org.springframework.version>4.0.5.release</org.springframework.version> <spring.security.version>4.0.1.release</spring.security.version> 

stacktrace:

severe: servlet.service() servlet [dispatcher] in context path [/housing] threw exception [request processing failed; nested exception java.lang.classcastexception: org.springframework.security.core.userdetails.user cannot cast com.esociety.dto.myuserdetails] root cause java.lang.classcastexception: org.springframework.security.core.userdetails.user cannot cast com.esociety.dto.myuserdetails     @ com.esociety.controller.logincontroller.dashboard(logincontroller.java:38)     @ sun.reflect.nativemethodaccessorimpl.invoke0(native method)     @ sun.reflect.nativemethodaccessorimpl.invoke(unknown source)     @ sun.reflect.delegatingmethodaccessorimpl.invoke(unknown source)     @ java.lang.reflect.method.invoke(unknown source)     @ org.springframework.web.method.support.invocablehandlermethod.invoke(invocablehandlermethod.java:215)     @ org.springframework.web.method.support.invocablehandlermethod.invokeforrequest(invocablehandlermethod.java:132)     @ org.springframework.web.servlet.mvc.method.annotation.servletinvocablehandlermethod.invokeandhandle(servletinvocablehandlermethod.java:104)     @ org.springframework.web.servlet.mvc.method.annotation.requestmappinghandleradapter.invokehandlemethod(requestmappinghandleradapter.java:749)     @ org.springframework.web.servlet.mvc.method.annotation.requestmappinghandleradapter.handleinternal(requestmappinghandleradapter.java:689)     @ org.springframework.web.servlet.mvc.method.abstracthandlermethodadapter.handle(abstracthandlermethodadapter.java:83)     @ org.springframework.web.servlet.dispatcherservlet.dodispatch(dispatcherservlet.java:938)     @ org.springframework.web.servlet.dispatcherservlet.doservice(dispatcherservlet.java:870)     @ org.springframework.web.servlet.frameworkservlet.processrequest(frameworkservlet.java:961)     @ org.springframework.web.servlet.frameworkservlet.doget(frameworkservlet.java:852)     @ javax.servlet.http.httpservlet.service(httpservlet.java:618)     @ org.springframework.web.servlet.frameworkservlet.service(frameworkservlet.java:837)     @ javax.servlet.http.httpservlet.service(httpservlet.java:725)     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:291)     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:206)     @ org.apache.tomcat.websocket.server.wsfilter.dofilter(wsfilter.java:52)     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:239)     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:206)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:316)     @ org.springframework.security.web.access.intercept.filtersecurityinterceptor.invoke(filtersecurityinterceptor.java:126)     @ org.springframework.security.web.access.intercept.filtersecurityinterceptor.dofilter(filtersecurityinterceptor.java:90)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:330)     @ org.springframework.security.web.access.exceptiontranslationfilter.dofilter(exceptiontranslationfilter.java:114)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:330)     @ org.springframework.security.web.session.sessionmanagementfilter.dofilter(sessionmanagementfilter.java:122)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:330)     @ org.springframework.security.web.authentication.anonymousauthenticationfilter.dofilter(anonymousauthenticationfilter.java:111)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:330)     @ org.springframework.security.web.servletapi.securitycontextholderawarerequestfilter.dofilter(securitycontextholderawarerequestfilter.java:168)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:330)     @ org.springframework.security.web.savedrequest.requestcacheawarefilter.dofilter(requestcacheawarefilter.java:48)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:330)     @ org.springframework.security.web.authentication.abstractauthenticationprocessingfilter.dofilter(abstractauthenticationprocessingfilter.java:205)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:330)     @ org.springframework.security.web.authentication.logout.logoutfilter.dofilter(logoutfilter.java:120)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:330)     @ org.springframework.security.web.csrf.csrffilter.dofilterinternal(csrffilter.java:96)     @ org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:107)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:330)     @ org.springframework.security.web.header.headerwriterfilter.dofilterinternal(headerwriterfilter.java:64)     @ org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:107)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:330)     @ org.springframework.security.web.context.securitycontextpersistencefilter.dofilter(securitycontextpersistencefilter.java:91)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:330)     @ org.springframework.security.web.context.request.async.webasyncmanagerintegrationfilter.dofilterinternal(webasyncmanagerintegrationfilter.java:53)     @ org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:107)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:330)     @ org.springframework.security.web.filterchainproxy.dofilterinternal(filterchainproxy.java:213)     @ org.springframework.security.web.filterchainproxy.dofilter(filterchainproxy.java:176)     @ org.springframework.web.filter.delegatingfilterproxy.invokedelegate(delegatingfilterproxy.java:344)     @ org.springframework.web.filter.delegatingfilterproxy.dofilter(delegatingfilterproxy.java:261)     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:239)     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:206)     @ org.apache.catalina.core.standardwrappervalve.invoke(standardwrappervalve.java:219)     @ org.apache.catalina.core.standardcontextvalve.invoke(standardcontextvalve.java:106)     @ org.apache.catalina.authenticator.authenticatorbase.invoke(authenticatorbase.java:503)     @ org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:136)     @ org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.java:79)     @ org.apache.catalina.valves.abstractaccesslogvalve.invoke(abstractaccesslogvalve.java:610)     @ org.apache.catalina.core.standardenginevalve.invoke(standardenginevalve.java:88)     @ org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:526)     @ org.apache.coyote.http11.abstracthttp11processor.process(abstracthttp11processor.java:1078)     @ org.apache.coyote.abstractprotocol$abstractconnectionhandler.process(abstractprotocol.java:655)     @ org.apache.coyote.http11.http11nioprotocol$http11connectionhandler.process(http11nioprotocol.java:222)     @ org.apache.tomcat.util.net.nioendpoint$socketprocessor.dorun(nioendpoint.java:1566)     @ org.apache.tomcat.util.net.nioendpoint$socketprocessor.run(nioendpoint.java:1523)     @ java.util.concurrent.threadpoolexecutor.runworker(unknown source)     @ java.util.concurrent.threadpoolexecutor$worker.run(unknown source)     @ org.apache.tomcat.util.threads.taskthread$wrappingrunnable.run(taskthread.java:61)     @ java.lang.thread.run(unknown source) 

i have similar "requirements" , working fine. setup follows

@configuration protected static class authenticationconfiguration extends         globalauthenticationconfigureradapter {      @autowired     private userdetailsservice userdetailsservice;     @autowired     private passwordencoder passwordencoder;      @override     public void init(authenticationmanagerbuilder auth) throws exception {         auth.userdetailsservice(userdetailsservice).passwordencoder(                 passwordencoder);     }  } 

my guess problem auth.jdbcauthentication() provide implementation of userdetailsservice returns core security user , not use implementation @ all. see javadoc:

add jdbc authentication authenticationmanagerbuilder , return jdbcuserdetailsmanagerconfigurer allow customization of jdbc authentication. method ensure userdetailsservice available getdefaultuserdetailsservice() method. note additional userdetailsservice's may override userdetailsservice default.


Comments

Popular posts from this blog

node.js - Using Node without global install -

How to access a php class file from PHPFox framework into javascript code written in simple HTML file? -

java - Null response to php query in android, even though php works properly -