2015-01-02 20 views
7

Ben kullanıcı login olduktan sonra bir sayfasını oluşturduğunda basit @Controller sınıf var:Spring MVC, ModelAttribute'a veri bağlamayı nasıl yasaklar?

@Controller 
@SessionAttributes("user") 
public class DashBoardController { 

    @RequestMapping(value="/user/dashBoard", method=RequestMethod.GET) 
    public String showDashBoardPage(@ModelAttribute("user") User user, Model model) { 
     //do some work here.... 
     return "dashBoard"; 
    } 

} 

Gördüğünüz gibi, user nitelik hala oturumda ve sadece oradan çıkarmak istiyorum @ModelAttribute ek açıklama kullanarak mevcut olduğu, başka hiçbir şey. Ancak, istekte bulunmak için herhangi bir parametre eklerseniz, yay bu parametreyi varolan kullanıcı nesnesine bağlamaya çalışır, bu benim istediğim şey değil, bu davranışı nasıl yasaklar?

public class User { 

    private String name; 
    private String password; 
    private Language language; 

    //public getters and setters here... 
} 

benim dashBoard sayfasının dilini değiştirmek isterseniz, ben ?language=en parametrenin eklenmesiyle ve bu durumda ilkbaharda bu sayfayı istemek dilini değiştirmek için çalışır:

daha spesifik olmak gerekirse, burada Kullanıcı sınıfı var kullanıcı uyumsuzluğu alanı türü, hangi tür uyumsuzluk istisnası ile başarısız olur. Elbette parametre adını User alanlarından hiçbiriyle uyuşmayan bir şeye değiştirerek yürüyebilirim, ancak bu kırılgan bir çözüm gibi görünüyor. Bu veri bağlama davranışını denetlemek için herhangi bir yolu var mı? Spring 4.1.3

+4

kullanmayın '@ ModelAttribute' bunun için ... bunu kullanmayın ... Eğer kullanıcı giriş yapmış olmasını istiyorsanız bağlama veri için kullanılan değilse normal güvenlik ile bütünleşmeli ve özel bir çözüm kullanmak istiyorsanız gerçekten bir 'Kullanıcı 'ile ne yapacağını bilen kendi' HandlerMethodArgumentResolver'ı oluşturmak istiyorsanız' Principal 'kullanmalısınız. –

+1

"Kullanıcı" aracılığıyla "kullanıcı" seçeneğini kullanabilmeniz gerekir, bu da @ModelAttribute ("kullanıcı") Kullanıcı kullanıcısına olan ihtiyacı ortadan kaldırır. – zeroflagL

+0

Yorumlarınız için teşekkür ederiz, şimdilik, kullanıcıyı oturumdan çekmek için ModelMap # get() kullanmaya karar verdim, ancak daha sonra bu işlevselliği ele almayı amaçladığı için Spring güvenliğine geçeceğim. – troy

cevap

2

istek parametrelerinin bağlama devre dışı bırakmak için false ayarlayabilirsiniz binding denilen @ModelAttribute bir özelliği vardır kullanın. Usage: @ModelAttribute(binding=false) metod parametresinden önce.

Referans: click