2012-04-05 8 views
3

がshiro.ini史郎はいつもここで

shiro.loginUrl = /login.jsp

######### URL CONFIG番号からconfigですlogin.jspにするために私をリダイレクト########### [urls] /login.jsp = anon/public/login/** = anon/public/app/** = authc

ストライプ ...

@UrlBinding("/public/app/") 
public class CalculatorActionBean implements ActionBean { 
..... 

} 

@UrlBinding("/public/login/") 
public class UserAuthenticateBean implements ActionBean { 

    private static final transient Logger log = LoggerFactory.getLogger(UserAuthenticateBean.class); 
    private ActionBeanContext context; 
    private String username; 
    private String password; 
    private String message; 

    public ActionBeanContext getContext() { 
     return context; 
    } 

    public void setContext(ActionBeanContext context) { 
     this.context = context; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    @DefaultHandler 
    @DontValidate 
    public Resolution defaultHander() { 
     return new ForwardResolution("/login.jsp"); 
    } 

    public Resolution login() { 

     Subject currentUser = SecurityUtils.getSubject(); 
     log.info("CU=" + currentUser.toString()); 


     if (!currentUser.isAuthenticated()) { 
      TenantAuthenticationToken token = new TenantAuthenticationToken(username, password, "jdbcRealm"); 
      //UsernamePasswordToken token = new UsernamePasswordToken("akumar", "ash"); 
      token.setRememberMe(true); 
      try { 
       currentUser.login(token); 
      } catch (UnknownAccountException uae) { 
       log.info("There is no user with username of " + token.getPrincipal()); 
      } catch (IncorrectCredentialsException ice) { 
       log.info("Password for account " + token.getPrincipal() + " was incorrect!"); 
      } catch (LockedAccountException lae) { 
       log.info("The account for username " + token.getPrincipal() + " is locked. " 
         + "Please contact your administrator to unlock it."); 
      } // ... catch more exceptions here (maybe custom ones specific to your application? 
      catch (AuthenticationException ae) { 
       //unexpected condition? error? 
       ae.printStackTrace(); 
      } 
     } 

     if (currentUser.isAuthenticated()) { 
      message = "Success"; 
     } else { 
      message = "Fail"; 
     } 

     System.out.println(message); 


     message += getUsername() + getPassword(); 
     return new ForwardResolution("/logged_in.jsp"); 
    } 
} 

logged_in.jsp今、私はラインshiro.iniから /公共/アプリ/ ** = authcは を削除する場合

<a href ="/oc/public/app">app</a> 

、私は、ユーザーとゲスト

ログイン用/公共/アプリにアクセスすることができます

私が行を保持していれば、誰もページにアクセスできず、login.jspに戻ります。

私を運転してください!

助けてください!

答えて

3

変更あなたのURLの設定は、「authcは」実際のログインURLをフィルタリングを持っている:

[main] 
... 
authc.loginUrl = /login.jsp 

[urls] 
/login.jsp = authc 
/public/login/** = anon 
/public/app/** = authc 

authcフィルタは、要求がまだそれが根本的なページに通過できるように認証されていないかどうかを知るには十分にスマートでありますユーザーはログインできます。

+0

ありがとうございました。驚くばかり。 authc.loginurlへのshiro.loginurlのちょうどちょっとしたことがそのトリックでした。いつものように、あなたの答えは正確でした! – aks

+0

うれしい! –

関連する問題