stripes - Shiro 总是将我重定向到 login.jsp

标签 stripes shiro

这里是shiro.ini的配置

shiro.loginUrl = /login.jsp

######### URL CONFIG ################### [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

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

现在,如果我删除该行 /public/app/** = authc 从 shiro.ini,我可以访问/public/app 以获取登录用户和 guest

如果我保留这条线,那么就没有人可以访问该页面,它会返回到 login.jsp

快把我逼疯了!

求助!!

最佳答案

更改您的 urls 配置以使用“authc”过滤实际的登录 url:

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

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

authc 过滤器足够智能,可以知道请求是否未通过身份验证,仍然让它通过底层页面,以便用户可以登录。

关于stripes - Shiro 总是将我重定向到 login.jsp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10033929/

相关文章:

java - JSTL 导入标签抛出带有相对 URL 的 java.lang.IllegalStateException

java - JerseyTest 与 shiro

grails - 无法解析类 org.apache.shiro.grails.ConfigUtils

mysql - Grails Shiro 插件创建只读表

parameter-passing - 如何将变量从一个 ActionBean 传递到另一个 ActionBean?

java - 使用 Spring 到 @autowire mybatis 映射器的 NullPointerException

java - 条纹框架 : how can I disable string escaping in forms

java - 将 WebService (JAX-RS) 与 Java Stripes 集成

java - Apache Shiro 是否支持 bCrypt?

Tapestry apache shiro requireroles 注释