2014-12-02 2 views
0

В моем приложении у меня есть этот метод :JSON размещены с @RequestParam

RequestMapping(value = "/variable/add", method = RequestMethod.POST) 
public @ResponseBody 
Object addVariable(@RequestBody MyObject myObject) { 
    //do something 
    return saimVariable; 
} 

и аутентификации аспект:

@Around("execution(* pl.my.company.*.*(..))") 
public Object advice(ProceedingJoinPoint joinPoint) { 
    ServletRequestAttributes t = (ServletRequestAttributes) RequestContextHolder 
      .currentRequestAttributes(); 
    HttpServletRequest request = t.getRequest(); 

    String username = (String) request.getParameter("username"); 
    System.out.println("USER : " + username); 
    try { 
     if (username.equals("myname")) { 
      System.out.println("*** ACCESS GRANTED *** "); 
      Object response = joinPoint.proceed(); 
      return response; 
     } else { 
      System.out.println(); 
      return "ACCESS DENIED"; 
     } 

    } catch (Throwable e) { 
     System.out.println(e.getMessage()); 
     return "ACCESS DENIED"; 
    } 

} 

}

Я хочу создать REST так что для securitu мне нужно аутентифицировать КАЖДЫЙ запрос, поэтому мне нужно передать также USERNAME, а не только JSON. Но я не знаю, как это сделать, потому что, когда я использую @RequestParam("myObject") вместо @RequestBody, он просто не работает. Так что я задал себе вопрос:

Как передать и JSON, и другие параметры (строки, ints ... и т. Д.) С помощью ONE Запрос POST?

+0

Почему вместо этого? Вы хотите как '@ RequestBody' для данных JSON, так и' @ RequestParam' для параметров. – zeroflagL

+0

Но как мне передать оба JSON и другие параметры для обслуживания, чтобы JSON был хорошо переведен на объект в java? – jmachnik

+0

Вам лучше настроить Spring Security и использовать фильтр для реализации вашей аутентификации. –

ответ

1

1) Сначала я предлагаю вам использовать Spring-Security. Для проверки каждого запроса есть весна @PreAuthorize, которая поможет проверить каждый запрос перед обработкой.

2) И если вы хотите использовать текущий ток, зарегистрированный в имени пользователя пользователя, тогда их нет необходимости передавать два параметра. Вы можете проверить текущий зарегистрированный пользователь, используя следующий код.

@PreAuthorize("isAuthenticated()") 
    @RequestMapping(value = "/current", method = RequestMethod.GET) 
    public @ResponseBody Users getCurrentLoggedInUser() throws Exception { 
     Object authenticatorPrincipalObject = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 
     String userName = null; 
     if(authenticatorPrincipalObject != null && authenticatorPrincipalObject instanceof Users){ 
      Users authenticatorPrincipal = (Users) authenticatorPrincipalObject; 
      userName = authenticatorPrincipal.getUsername(); 
     }else if(authenticatorPrincipalObject != null){ 
      userName = authenticatorPrincipalObject.toString(); 
     }else{ 
      return null; 
     } 
     return userService.getCurrentLoggedInUser(userName); 
    } 

3) И я не думаю, что в одном запросе можно передать как @RequestBody и @RequestParam. Spring MVC - Why not able to use @RequestBody and @RequestParam together

Смежные вопросы