0

spring-extjsアプリケーションでログインユーザーを取得する際に問題が発生しました。SpringSecurity2.0.4を使用しています。これが私が試したことの詳細です。

コントローラクラス:

@RequestMapping(value="/StaffingApplication/index.action", method = RequestMethod.GET)
public String printUser(ModelMap model) {
  Authentication auth = SecurityContextHolder.getContext().getAuthentication();
  String name = auth.getName(); //get logged in username    
  System.out.println(name);
  model.addAttribute("username", name);
  return "index.jsp";
}

login.jsファイル

var login = new Ext.FormPanel({
    labelWidth:80,
    url:'j_spring_security_check',
    frame:true,
    title:'Please Login',
    defaultType:'textfield',
    width:300,
    height:130,
    monitorValid:true,
    // Specific attributes for the text fields for username / password.
    // The "name" attribute defines the name of variables sent to the server.

    items:[{
        fieldLabel:'Username',
        name:'j_username',
        allowBlank:false
    },{
        fieldLabel:'Password',
        name:'j_password',
        inputType:'password',
        allowBlank:false
    }],

    // All the magic happens after the user clicks the button
    buttons:[{
        text:'Login',
        formBind: true,
        // Function that fires when user clicks the button
        handler:function(){
        login.getForm().submit({

            method:'POST', 

            // Functions that fire (success or failure) when the server responds.
            // The server would actually respond with valid JSON,
            // something like: response.write "{ success: true}" or

            // response.write "{ success: false, errors: { reason: 'Login failed. Try again.' }}"
            // depending on the logic contained within your server script.
            // If a success occurs, the user is notified with an alert messagebox,

            // and when they click "OK", they are redirected to whatever page
            // you define as redirect. 

            success:function(){
            Ext.Msg.alert('Status', 'Login Successful!', function(btn, text){
                if (btn == 'ok'){
                      window.location = 'index.action';
                }
            });

        },

        // Failure function, see comment above re: success and failure.
        // You can see here, if login fails, it throws a messagebox
        // at the user telling him / her as much.  


        failure:function(form, action){
            if(action.failureType == 'server'){
                obj = Ext.util.JSON.decode(action.response.responseText);

                Ext.Msg.alert('Login Failed!', obj.errors.reason);
            }else{
                Ext.Msg.alert('Warning!', 'Authentication server is unreachable : ' + action.response.responseText);
                //window.location='loginFailure.html'+action.response.responseText; 
            }
            login.getForm().reset();
        } 

        });
    }
    }]
});

私のjspページでは、このようにアクセスします。

<div id="header" class="header">Options Staffing Application
    <div style="" id="user-status">
        <a href='<c:url value="j_spring_security_logout"/>'>Logout</a>
        <h3>Username : ${username}</h3>
    </div>
</div>

しかし、ユーザー名の代わりに空白が表示されます。コントローラで印刷しようとすると、値が印刷されますが、jspページに表示されないようです。他のスレッドを通過しましたが、役に立ちませんでした。助けていただければ幸いです。

時間をありがとうサチン

4

1 に答える 1

2

コントローラクラスで行うのと同じようにjspからアクセスできるため、ユーザー名をオブジェクトモデルに入れる必要はありません。

<h3>Username <%=SecurityContextHolder.getContext().getAuthentication().getName(); =></h3>

またはさらに良い:

<h3>Username <sec:authentication property="name" /></h3>

しかし、SpringSecurity2でそのtaglibを使用できるかどうかはわかりません

于 2012-05-09T19:47:21.160 に答える