2016-02-25 60 views
1

例如,在一個網絡appliation,我有一個用戶模型:如何防止客戶端更新的敏感領域

class User{ 
    String username; 
    String email; 
    String passowrd; 


    boolean active; 
    Set<Role> roles; 
} 

的支持下列操作:

​​

在服務器端,我們使用SpringMVCUser直接獲取模型:

@RequestMapping(value = "", method = RequestMethod.POST) 
protected Result create(@Valid @RequestBody User user, BindingResult bindingResult) { 
    ..... 
} 

到目前爲止與正常的工作流程那麼好,但想想別人(不是管理員用戶)發送:

/user HTTP/Update 

{ 
    "username":"jk", 
    "active":true, 
    "roles":[{ 
     id:"role_admin_id" 
    }] 
} 

如果requset被接受,用戶jk將有super_admin的作用,這是不預期。

你如何保護它?

回答

0

首先,您發送的@RequestBody用戶用戶只是您想更新的常規對象。這不是Spring Security用戶。如果你想在Spring安全用戶中定義User,你必須實現UserDetails。你已經有正確的彈簧安全設置?我不知道你是否使用xml或java配置。如果你使用Java配置,你可以控制角色的訪問如下:

protected void configure(HttpSecurity http) throws Exception { 
    http.authorizeRequests()                 
     .antMatchers("/resources/**", "/signup", "/about").permitAll()     
     .antMatchers("/admin/**").hasRole("ADMIN")          
     .antMatchers("/db/**").access("hasRole('ADMIN') and hasRole('DBA')")    
     .anyRequest().authenticated()             
     .and() 
    // ... 
    .formLogin(); 
} 

參考:http://docs.spring.io/spring-security/site/docs/current/reference/html/jc.html#authorize-requests