0

spring_security_checkを使用してログインページを作成しました。
ここ:

<form name='f' action="/sec_test/j_spring_security_check" method='POST'>

    <table>
        <tr>
            <td>User:</td>
            <td><input type="text" name="j_username" value=''>
            </td>
        </tr>
        <tr>
            <td>Password:</td>
            <td><input type="password" name="j_password" />
            </td>
        </tr>
        <tr>
            <td colspan='2'><input name="submit" type="submit"
                value="submit" />
            </td>
        </tr>
        <tr>
            <td colspan='2'><input name="reset" type="reset" />
            </td>
        </tr>
    </table>
</form>

しかし、後でj_usernameにアクセスできなくなります。

試しました:

* request.getParameter( "j_username")
* request.getAttribute( "j_username")
* request.getAttribute( "j_username")
* request.getUserPrincipal()。getName()
* request.getRemoteUser()

すべてからそれらのうち、私が得ているのはnullだけです!

何をすべきか考えていますか?

4

2 に答える 2

2

Spring は、構成ファイルで構成された認証のタイプに基づいて認証を行います。認証が成功すると、ログイン成功 URL (/login.htm など) にリダイレクトされます。/login.htm にリダイレクトされるため、上書きされた認証フィルターで要求に明示的に設定しない限り、要求パラメーター (ユーザー名/ユーザー ロール) は取得されません。

認証が成功すると、Spring は認証された情報をユーザー ロールを含むセキュリティ コンテキストに格納します。この情報には、SecurityContext からアクセスできます。参照 -リンク

于 2012-06-18T11:50:33.547 に答える
0

あなたの春の設定ファイルを見てみたいです。とにかく、春のセキュリティが実際にそれを行うときに、ユーザーの資格情報を検証しようとしているようです。開始方法がわからない場合は、見つけることができるオンライン チュートリアルを含む、Spring のドキュメントを読んでください。私の春のセキュリティ設定は次のようになります。

<security:http auto-config="true" use-expressions="true" access-denied-page="/login.html">
    <security:form-login
        login-page="/login.html"
        authentication-failure-url="/loginfail.html"
        default-target-url="/authenticate.html"/>

    <security:logout
        invalidate-session="true"
        logout-success-url="/login.html"
        logout-url="/logoff.html"/>
</security:http>

<bean id="securityDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/security_DS"/>
    <property name="resourceRef" value="true"/>
</bean>

<bean id="encoder" class="org.springframework.security.crypto.password.StandardPasswordEncoder" />

<security:authentication-manager>
    <security:authentication-provider>
        <security:password-encoder ref="encoder" />
        <security:jdbc-user-service 
            data-source-ref="securityDataSource"
            authorities-by-username-query="SELECT l.user_name as username, r.role_name AS authority FROM login l join user_role ur on l.user_id = ur.user_id join role r on ur.role_id = r.role_id WHERE l.user_name = ?"
            users-by-username-query="SELECT user_name as username, password_value AS password, active_flg AS enabled FROM login WHERE user_name = ?"
        />        
    </security:authentication-provider>
</security:authentication-manager>

春がユーザーの資格情報を検証した後にユーザー名にアクセスしたい場合は、次のようにします。

@RequestMapping(value = { "/authenticate.html" }, method = { RequestMethod.GET, RequestMethod.HEAD })
public ModelAndView authenticateUser(final HttpServletRequest httpServletRequest, HttpSession httpSession, Authentication authentication) {
    User user = (User) authentication.getPrincipal();
    String userName = user.getUsername();
    ...

Spring 構成で指定した default-target-url に基づいて、リクエストが /authenticate.html メソッドに転送されることがわかります。

于 2012-06-16T14:23:03.207 に答える