actframework / act-aaa-plugin

Use OSGL aaa library to mange Authentication/Authorization/Accounting for ActFramework Application
Apache License 2.0
6 stars 2 forks source link

ActAAAService's ClassCastException when using "id" as user key #31

Closed leeaee closed 4 years ago

leeaee commented 5 years ago

When using "id" as user key, and id's Java type is Long.

The ActAAAService throw

java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String

when try to call protected String username(USER_TYPE user) method.

User class:

@DB
@Entity
@Table(name = "u_user")
public class User implements SimpleBean, UserLinked {

    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE)
    public Long id;

    @Column(name = "open_id", unique = true, nullable = false, updatable = false)
    public String openId;

    @Column(updatable = false)
    public String phone;

    ....
}

Log trace

2018-10-02 14:06:37.794 [XNIO-1 task-1] ERROR a.x.NetworkHandler - Error handling network request
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String
    at act.aaa.ActAAAService$Base.username(ActAAAService.java:220)
    at act.aaa.ActAAAService$Base.buildPrincipalFrom(ActAAAService.java:190)
    at act.aaa.ActAAAService$Base.principalOf(ActAAAService.java:169)
    at act.aaa.ActAAAService$Base.findByName(ActAAAService.java:112)
    at act.aaa.DefaultPersistentService.findByName(DefaultPersistentService.java:97)
    at act.aaa.AAAService.resolvePrincipal(AAAService.java:312)
    at act.aaa.AAAService.sessionResolved(AAAService.java:288)
    at act.aaa.AAAPlugin$1.on(AAAPlugin.java:65)
    at act.aaa.AAAPlugin$1.on(AAAPlugin.java:56)
    at act.event.EventBus.callOn(EventBus.java:1310)
    at act.event.EventBus.callOn(EventBus.java:1332)
    at act.event.EventBus.callOn(EventBus.java:1367)
    at act.event.EventBus._emitWithOnceBus(EventBus.java:1283)
    at act.event.EventBus.emit(EventBus.java:847)
    at act.app.ActionContext.resolve(ActionContext.java:1245)
    at act.route.Router$ContextualHandler.handle(Router.java:1596)
    at act.xio.NetworkHandler$3.run(NetworkHandler.java:158)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
greenlaw110 commented 5 years ago

Now an new configuration aaa.user.username has been created to allow app to specify the username field of User class. If this configuration is not set then the default value email will be applied.