5

私はApache shiroの初心者です。このステートメントを実行すると例外が発生します。

currentUser.login(token);

例外は

 errororg.apache.shiro.authc.AuthenticationException: Authentication failed for token submission [org.apache.shiro.authc.UsernamePasswordToken - abc@gmail.com, rememberMe=true].  Possible unexpected error? (Typical or expected login exceptions should extend from AuthenticationException).

私はlogin.theコードのためにこのメソッドを呼び出しています.

  public boolean authorize(String username,String password)
{
    Boolean status=false;
    log.debug("the user id "+username+"passwrodD::"+password);
    Realm realm = new JdbcRealm();
    DefaultSecurityManager securityManager = new DefaultSecurityManager(realm);
    UsernamePasswordToken token = new UsernamePasswordToken(username, password);
    token.setRememberMe(true);
    SecurityUtils.setSecurityManager(securityManager);
    Subject currentUser = SecurityUtils.getSubject();

    Response r = null;
    log.debug("before process for login");
    try
    {
        currentUser.login(token);   //This throws an error upon form submission

        r = Response.ok().entity(token).build();            

    }
    catch (UnknownAccountException uae ) {
        //username wasn't in the system, show them an error message?
        System.out.println("the user name is invalid");
    } catch ( IncorrectCredentialsException ice ) {
        //password didn't match, try again?
        System.out.println("the password name is invalid");
    } catch ( LockedAccountException lae ) {
        //account for that username is locked - can't login.  Show them a message?

    } catch ( AuthenticationException ae ) {
        //unexpected condition - error?
        System.out.println("unexpect error"+ae);
    }
    return status;
}

私の shiro.ini ファイル

 [main]
 jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm
 jdbcRealm.permissionsLookupEnabled = true
 jdbcRealm.authenticationQuery =select User_Password FROM  user_master where User_id=?
 ds = com.mysql.jdbc.jdbc2.optional.MysqlDataSource
 ds.serverName = localhost
 ds.user = root
 ds.password = root
 ds.databaseName = test
 jdbcRealm.dataSource = $ds
 [users]
 [roles]
 [urls]

web.xml ファイルにリスナーとフィルターを含めます。authenticationQuery を自分のクエリに変更します。私が実行しているときに、上記のエラーが発生しています。また、クエリを変更またはオーバーライドする正しい方法であることも知っています。

4

2 に答える 2

0

この例外が発生しましたが、問題は でsecurityManager.realm間違って設定していたことshiro.iniです。これは私が持っていたものです:

[main]
fooRealm = com.company.foo.Realm
securityManager.realms = fooRealm

これはそれを修正したものです(私は欠落していました$):

[main]
fooRealm = com.company.foo.Realm
securityManager.realms = $fooRealm
于 2015-07-07T15:22:59.040 に答える
0

問題は、あなたがあなたの中に欠けていることだと思いsecurityManager.realm = $jdbcRealmますshiro.ini

于 2015-01-10T18:44:01.780 に答える