1

Shiro セキュリティを使用して Spring MVC アプリケーションで以下のシナリオを実現する方法:

ユーザーが認証されておらず、ページを要求している場合、Shiro はログイン ページにリダイレクトする必要があります。ユーザーは正常にログインし、Shiro はsuccessUrl URLではなく、以前に要求されたページにリダイレクトします。

ログイン部分は私のアプリケーションで問題なく動作しています。以下は私の既存のコードからのスニペットです

<!-- Shiro filter -->
    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <property name="securityManager" ref="securityManager" />
        <property name="loginUrl" value="/login" />
        <property name="successUrl" value="/dashboard" />
        <property name="unauthorizedUrl" value="/error" />
        <property name="filterChainDefinitions">
            <value> 
                <!-- !!! Order matters !!! -->
                /authenticate = anon
                /login = anon
                /logout = anon
                /error = anon
                /static/** = anon
                /** = authc
            </value>
        </property>
    </bean>
4

1 に答える 1

2

LoginController で:

public String doLogin(
        HttpServletRequest request,
        HttpServletResponse response,
        @RequestParam(required = true) String username,
        @RequestParam(required = true) String password,
        @RequestParam(required = false, defaultValue = "false") boolean rememberMe,
        Model model) {
    Subject currentUser = SecurityUtils.getSubject();

    ...

    if (currentUser.isAuthenticated()) {
        String fallbackUrl = "redirect:/";
        try {
            // redirect to previously requested page
            WebUtils.redirectToSavedRequest(request, response, fallbackUrl);
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
            return fallbackUrl;
        }
        // return null to prevent spring render another page
        return null;
    } else {
        session.setAttribute("loginFailCount", ++loginFailCount);
    }
    return "login";
}
于 2012-12-19T15:22:25.607 に答える