java.lang.ClassCastException:[B> java.lang.Stringにキャストできません

theJava:
public Login authenticate(Login login) {
        try {
            MessageDigest md = MessageDigest.getInstance("SHA-256");
            String password = login.getPassword();
            try {
                md.update(password.getBytes("UTF-16"));
                byte[] digest = md.digest();
                String query = "SELECT L FROM Login AS L WHERE L.email=? AND L.password=?";
                Object[] parameters = { login.getEmail(), digest };
                List<Login> resultsList = (getHibernateTemplate().find(query,parameters));
                 if (resultsList.isEmpty()) {
                         //error dude
                     }
                 else if (resultsList.size() > 1) {
                         //throw expections
                     }
                 else {
                       Login login1 = (Login) resultsList.get(0);
                       return login1;
                 }
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }                
       return null;  
    }

例外

> java.lang.ClassCastException: [B
> cannot be cast to java.lang.String
>         at org.hibernate.type.StringType.toString(StringType.java:44)
>         at org.hibernate.type.NullableType.nullSafeToString(NullableType.java:93)
>         at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:140)
>         at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:116)
>         at org.hibernate.param.PositionalParameterSpecification.bind(PositionalParameterSpecification.java:39)
>         at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:491)
>         at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1563)
>         at org.hibernate.loader.Loader.doQuery(Loader.java:673)
>         at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
>         at org.hibernate.loader.Loader.doList(Loader.java:2213)
>         at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
>         at org.hibernate.loader.Loader.list(Loader.java:2099)
>         at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
>         at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
>         at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
>         at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
>         at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
>         at org.springframework.orm.hibernate3.HibernateTemplate$29.doInHibernate(HibernateTemplate.java:856)
>         at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:373)
>         at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:847)
>         at com.intermedix.services.LoginService.authenticate(LoginService.java:30)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method)
>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:597)
>         at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:301)
>         at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
>         at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
>         at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
>         at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
>         at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
>         at $Proxy31.authenticate(Unknown Source)
>         at com.intermedix.ui.LoginDailog.checkLogin(LoginDailog.java:106)
>         at com.intermedix.ui.LoginDailog.access$0(LoginDailog.java:102)
>         at com.intermedix.ui.LoginDailog$2.handleAction(LoginDailog.java:88)
>         at com.vaadin.event.ActionManager.handleAction(ActionManager.java:228)
>         at com.vaadin.event.ActionManager.handleActions(ActionManager.java:198)
>         at com.vaadin.ui.Panel.changeVariables(Panel.java:345)
>         at com.vaadin.ui.Window.changeVariables(Window.java:1073)
>         at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariables(AbstractCommunicationManager.java:1094)
>         at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.doHandleUidlRequest(AbstractCommunicationManager.java:590)
>         at com.vaadin.terminal.gwt.server.CommunicationManager.handleUidlRequest(CommunicationManager.java:266)
>         at com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:476)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
>         at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
>         at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)
>         at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
>         at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
>         at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
>         at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
>         at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
>         at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
>         at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
>         at org.mortbay.jetty.Server.handle(Server.java:326)
>         at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
>         at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:943)
>         at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)
>         at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
>         at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
>         at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
>         at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
gabuzo :

データベースのパスワード列はStringJavaでマップされているタイプであるとvarchar思われます(おそらく)。そのため、Hibernateはバイトarrayをに変換できませんString

行を次のように変更できます。

 String digest = new String(md.digest());
 String query = "SELECT L FROM Login AS L WHERE L.email=? AND L.password=?";
 Object[] parameters = { login.getEmail(), digest };

ただし、ダイジェストにはエンコードに関係なく文字にマップできないバイトが含まれているため、おそらく機能しません。バイナリblobを文字列にマッピングするには、おそらくbase64エンコーディング使用する必要があります

別の解決策は、データベースのスキームを変更し、passwordフィールドをでなくバイナリにすることvarcharです。

どちらの場合もpassword、データベースにフィールドが挿入される方法を知る必要があります。

コードに関するいくつかの注意:

ユーザー名とパスワードの両方を含むデータベースから行を選択してパスワードをチェックするのは奇妙だと思います。ユーザーだけを使用して選択し、データベースに返されたパスワードに対して提供されたパスワードを検証する方がより論理的ですが。

ハッシュ関数を使用して、パスワードがプレーンテキストでデータベースに保存されないようにします。それは良い。ただし、このスキームには大きな欠陥があります。複数のユーザーが同じパスワードを持っている場合、ハッシュされたパスワードはデータベース内で同じになります。したがって、データベースにアクセスでき、1人のユーザーのパスワードを知っている場合、このパスワードを共有しているすべてのユーザーを見つけるのは非常に簡単です。より安全なものを構築するには、saltを含むパスワードエンコーディングスキームを使用する必要があります

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

java.lang.ClassCastException:[Bはjava.lang.Stringにキャストできません

分類Dev

java.lang.RuntimeException:java.lang.ClassCastException:java.lang.Longをjava.lang.Stringにキャストできません

分類Dev

java.lang.ClassCastException:Zをjava.lang.Stringにキャストできません

分類Dev

java.lang.ClassCastException:java.lang.Stringをjava.lang.Doubleにキャストできません

分類Dev

java.lang.ClassCastException:java.lang.Doubleをjava.lang.Stringにキャストできません

分類Dev

java.lang.ClassCastException:java.lang.Stringをtableauのjava.lang.Integerにキャストできませんか?

分類Dev

java.lang.ClassCastException:[Ljava.lang.String; java.lang.Stringにキャストできません

分類Dev

java.lang.ClassCastException:java.lang.Object []をにキャストできません

分類Dev

java.lang.ClassCastException:[java.lang.Integerにキャストできません

分類Dev

java.lang.ClassCastException:クラスjava.sql.Dateをjava.lang.Stringにキャストできません

分類Dev

java.lang.ClassCastException:[Ljava.lang.Object; [Ljava.lang.String;にキャストできません。

分類Dev

ClassCastException:JSONArrayをjava.lang.String []にキャストできません

分類Dev

java.lang.ClassCastException:java 1.6では、java.lang.Longをjava.lang.Integerにキャストできません

分類Dev

java.lang.ClassCastException:[Ljava.lang.Object; classNameにキャストできません

分類Dev

このjava.lang.ClassCastExceptionの修正方法:[Bはjava.util.Listにキャストできません

分類Dev

ClassCastException:java.lang.Object []をjava.lang.String [] androidにキャストできません

分類Dev

AsyncTask:ClassCastException:java.lang.Object []をjava.lang.String []にキャストできません

分類Dev

java.lang.ClassCastException:org.apache.avro.generic.GenericData $ Recordをjava.lang.Stringにキャストできません

分類Dev

java.lang.ClassCastException:com.model.Imageをjava.lang.Stringにキャストできません

分類Dev

java.lang.ClassCastException:java.lang.Stringをcom.parse.ParseUserにキャストできません

分類Dev

RDD [LabeledPoint]の作成:java.lang.ClassCastException:java.lang.Longをjava.lang.Doubleにキャストできません

分類Dev

Kotlin:java.lang.ClassCastException:java.lang.Longをjava.lang.Integerにキャストできません

分類Dev

java.lang.ClassCastException:java.lang.Integerをjava.lang.Doubleにキャストできません

分類Dev

Hibernate:java.lang.ClassCastException:java.lang.Integerをjava.lang.Doubleにキャストできません

分類Dev

原因:java.lang.ClassCastException:java.lang.Classをjava.lang.reflect.ParameterizedTypeにキャストできません

分類Dev

java.lang.ClassException:AをBにキャストできません

分類Dev

ネストされた例外はjava.lang.ClassCastExceptionです:java.lang.Stringをキャストできません

分類Dev

ClassCastExceptionの取得:java.lang.Integerはキャストせずにjava.lang.Stringエラーにキャストできません

分類Dev

修正方法:java.lang.ClassCastException:java.util.ArrayListをjava.lang.Integerにキャストできません

Related 関連記事

  1. 1

    java.lang.ClassCastException:[Bはjava.lang.Stringにキャストできません

  2. 2

    java.lang.RuntimeException:java.lang.ClassCastException:java.lang.Longをjava.lang.Stringにキャストできません

  3. 3

    java.lang.ClassCastException:Zをjava.lang.Stringにキャストできません

  4. 4

    java.lang.ClassCastException:java.lang.Stringをjava.lang.Doubleにキャストできません

  5. 5

    java.lang.ClassCastException:java.lang.Doubleをjava.lang.Stringにキャストできません

  6. 6

    java.lang.ClassCastException:java.lang.Stringをtableauのjava.lang.Integerにキャストできませんか?

  7. 7

    java.lang.ClassCastException:[Ljava.lang.String; java.lang.Stringにキャストできません

  8. 8

    java.lang.ClassCastException:java.lang.Object []をにキャストできません

  9. 9

    java.lang.ClassCastException:[java.lang.Integerにキャストできません

  10. 10

    java.lang.ClassCastException:クラスjava.sql.Dateをjava.lang.Stringにキャストできません

  11. 11

    java.lang.ClassCastException:[Ljava.lang.Object; [Ljava.lang.String;にキャストできません。

  12. 12

    ClassCastException:JSONArrayをjava.lang.String []にキャストできません

  13. 13

    java.lang.ClassCastException:java 1.6では、java.lang.Longをjava.lang.Integerにキャストできません

  14. 14

    java.lang.ClassCastException:[Ljava.lang.Object; classNameにキャストできません

  15. 15

    このjava.lang.ClassCastExceptionの修正方法:[Bはjava.util.Listにキャストできません

  16. 16

    ClassCastException:java.lang.Object []をjava.lang.String [] androidにキャストできません

  17. 17

    AsyncTask:ClassCastException:java.lang.Object []をjava.lang.String []にキャストできません

  18. 18

    java.lang.ClassCastException:org.apache.avro.generic.GenericData $ Recordをjava.lang.Stringにキャストできません

  19. 19

    java.lang.ClassCastException:com.model.Imageをjava.lang.Stringにキャストできません

  20. 20

    java.lang.ClassCastException:java.lang.Stringをcom.parse.ParseUserにキャストできません

  21. 21

    RDD [LabeledPoint]の作成:java.lang.ClassCastException:java.lang.Longをjava.lang.Doubleにキャストできません

  22. 22

    Kotlin:java.lang.ClassCastException:java.lang.Longをjava.lang.Integerにキャストできません

  23. 23

    java.lang.ClassCastException:java.lang.Integerをjava.lang.Doubleにキャストできません

  24. 24

    Hibernate:java.lang.ClassCastException:java.lang.Integerをjava.lang.Doubleにキャストできません

  25. 25

    原因:java.lang.ClassCastException:java.lang.Classをjava.lang.reflect.ParameterizedTypeにキャストできません

  26. 26

    java.lang.ClassException:AをBにキャストできません

  27. 27

    ネストされた例外はjava.lang.ClassCastExceptionです:java.lang.Stringをキャストできません

  28. 28

    ClassCastExceptionの取得:java.lang.Integerはキャストせずにjava.lang.Stringエラーにキャストできません

  29. 29

    修正方法:java.lang.ClassCastException:java.util.ArrayListをjava.lang.Integerにキャストできません

ホットタグ

アーカイブ