1

ユーザー認証にSpringとLdapを使用しています。ユーザーがすでにログインしているときにユーザーをホームページにリダイレクトしたいのですが、Googleで読んだいくつかの解決策を試しましたが、うまくいきませんでした。ここに私の設定コードがあります...

Spring-Security.xml

   <security:http auto-config="true" use-expressions="true"
        access-denied-page="/denied" access-decision-manager-ref="accessDecisionManager"
        disable-url-rewriting="true">

        <security:remember-me key="_spring_security_remember_me"
            token-validity-seconds="864000" token-repository-ref="tokenRepository" />

        <security:intercept-url pattern="/login/login"
            access="permitAll" />



        <security:intercept-url pattern="/resources/**"
            access="permitAll" />

        <security:intercept-url pattern="/member/*"
            access="permitAll" />

        <security:intercept-url pattern="user/admin/admin"
            access="hasRole('ROLE_ADMIN')" />

        <security:intercept-url pattern="/user/user"
            access="hasRole('ROLE_USERS')" />




        <security:form-login login-page="/login/login"
            authentication-failure-url="/login/login?error=true"
            default-target-url="/checking" />

        <security:logout invalidate-session="true"
            logout-success-url="/login/login" logout-url="/login/logout" />

        <security:custom-filter ref="captchaCaptureFilter"
            before="FORM_LOGIN_FILTER" />
        <!-- <security:custom-filter ref="captchaVerifierFilter" after="FORM_LOGIN_FILTER" 
            /> -->

        <!-- <security:session-management
            invalid-session-url="/logout.html">
            <security:concurrency-control
                max-sessions="1" error-if-maximum-exceeded="true" />

        </security:session-management>
        <security:session-management
            session-authentication-strategy-ref="sas" /> -->
    </security:http>

私のログインコントローラー

public class LoginController {

    @Autowired
    private User user;

    @Autowired
    SecurityContextAccessor securityContextAccessor;

    @RequestMapping(value = "login/login", method = RequestMethod.GET)
    public String getLogindata(
            @RequestParam(value = "error", required = false) String error,
            Model model) {

        Authentication auth = SecurityContextHolder.getContext().getAuthentication();

        model.addAttribute("error", error);

        if (securityContextAccessor.isCurrentAuthenticationAnonymous() && auth.getPrincipal() == null) {
            return "login/login";
        } else {
            return "redirect:/member/user";
        }
    }
}

auth.getName() は、すでにログインしている場合でも、常に匿名ユーザーを提供します....

4

1 に答える 1

0

default-target-url="/checking" の代わりに、spring-security.xml の default-target-url に正常にログインした後、ターゲットのリダイレクトをホームページに書き込む必要があります。

/login/login Controller で何を達成しようとしているのかわかりませんか? ユーザーのみをリダイレクトする場合は、 /member/user へのログインに成功した後、次のように記述します。

        <security:form-login login-page="/login"
         always-use-default-target='true' 
         default-target-url="/member/user"
         authentication-failure-url="/login/login?error=true"
         />

ログインコントローラーは次のようになります。

    @RequestMapping(value="/login", method = RequestMethod.GET)
public String login(ModelMap model) {
return "login";
}

認証プロバイダーが正常で正しい場合、Spring セキュリティは、ログインに成功した後、自動的に /member/user にリダイレクトします。

于 2013-01-23T22:16:58.900 に答える