2016-11-05 3 views
0

Существует требование, чтобы я хотел создать объект сеанса в классе Spring@Service. В классе обслуживания только один способ есть:Как создать сеанс в весеннем классе обслуживания?

public UserDetails loadUserByUsername(String username) 
      throws UsernameNotFoundException { 

     User user=appServiceManager.getUser(username); 

loadUserByUsername метод не будет принимать дополнительные параметры больше - кроме username, так как она звонит по предопределенного класса.

Я хочу сохранить данные пользователя в сеансе.

Как я могу получить сеанс в моем классе обслуживания?

ответ

0

session объект связан с уровнем представления (View), поэтому не рекомендуется передавать объект сеанса на уровень сервиса, а вам нужно обрабатывать его в самом контроллере.

Если вы связали объекты session или view сопутствующих объектов на сервисном уровне, вы в конечном итоге плотно соедините свой уровень обслуживания (бизнес-логику) с уровнем представления, что будет проблемой, поскольку вся цель служебного уровня слабое соединение с разными конечными точками (например, контроллер, другой веб-сервис и т. д.).

Таким образом, вы можете добавить userdetails в Httpsession в самом контроллере слоя, как показано ниже:

@Controller 
public class UserDetailsController { 

    public R method1(HttpSession session, UserDetailsBean bean) { 

    session.addAttribute("USERDETAILS", bean); 

    //you can use UserDetailsBean object anywhere until you remove from session 
    } 
} 

Если вы используете spring-security, то вы можете легко получить userdetails в контроллере, как показано ниже:

UserDetails userDetails = SecurityContextHolder.getContext().getAuthentication().getDetails(); 

Вы можете найти API here

+0

Фактически я разрабатываю приложение безопасности, поэтому из службы вызов будет запускаться с помощью внутреннего класса UserDetailsService. так что ..... я соглашусь с вашим ответом, но мне нужно только сохранить сеанс. ..... боб не придет к контроллеру .. Есть ли способ создать сеанс там ???? – mike

+0

UserDetails userDetails = SecurityContextHolder.getContext(). GetAuthentication(). GetDetails(); – developer

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