Обновить имя пользователя и фамилию в основном - PullRequest
0 голосов
/ 31 мая 2018

Я обновляю информацию пользователя, такую ​​как имя и фамилия , и я получаю имя и фамилию на всех страницах для приветственное сообщение .

У меня есть два контроллера: один для ajax отображения запросов, а другой для normal отображения запросов.

Обычный контроллер отображения запросов имеет этот метод.В этом контроллере присутствует вся навигация по страницам и некоторое отображение запросов, которые не являются вызовами ajax

private String getPrincipalDisplay() {
    GreenBusUser user = null;
            String userName = "";
            Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();

            if (principal instanceof UserDetails) {
                user = (GreenBusUser) principal;
                userName = user.getFirstName() + " " + user.getLastName();
            } else {
                userName = "";
            }
            return userName;
}

Вот так я получаю username на каждой странице, возвращая строку этой функции Iя добавляю его в объект ModelMap .

Когда я обновляю информацию пользователя Я делаю в сопоставлении запроса ajax.

@RequestMapping(value = "/restify/updateUserData",  method = RequestMethod.PUT, headers = "Accept=application/json")
    public ServiceResponse forgotPassword(@RequestBody Object user)
    {   
        //logger.debug("getting response");
        return setDataPut("http://localhost:7020/forgotPassword",user);
    } 

пользователь является Тип объекта с данными json .Теперь, как мне извлечь данные из объекта и обновить мои имя и фамилию в основном субъекте .

Это мой GreenBusUser класс

public class GreenBusUser  implements UserDetails
{
    private static final long serialVersionUID = 1L;
    private String username;
    private String password;
    private Collection<? extends GrantedAuthority> grantedAuthorities;

    private String firstName;

    private String lastName;

    public GreenBusUser(String username,String password,Collection<? extends GrantedAuthority>  authorities,String firstName, String lastName)
    {
        this.username = username;
        this.password = password;
        this.grantedAuthorities = authorities;
        this.firstName=firstName;
        this.lastName=lastName;

        this.grantedAuthorities.stream().forEach(System.out::println);

    }

    public Collection<? extends GrantedAuthority> getAuthorities()
    {
        return grantedAuthorities;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public String getPassword()
    {
        return password;
    }

    public String getUsername()
    {
        return username;
    }

    public boolean isAccountNonExpired()
    {
        return true;
    }

    public boolean isAccountNonLocked()
    {
        return true;
    }

    public boolean isCredentialsNonExpired()
    {
        return true;
    }

    public boolean isEnabled()
    {
        return true;
    }
}

ОБНОВЛЕНИЕ :::::

Я обновил ваш код и применил часть вашего ответа к моему, но все же столкнулся с проблемой

@RequestMapping(value="/updateUser",method=RequestMethod.GET)
    public String updateUser(ModelMap model) {

        UserInfo user = getUserObject();
        GreenBusUser newGreenBususer = null;
        List<User> list = new ArrayList<User>();


        list = FetchDataService.fetchDataUser("http://localhost:8060/GetuserbyUserName?username=" + getPrincipal(), user.getUsername(), user.getPassword());
        logger.debug("new user list ----->>>"+list.size());
        User newuser=(User)list.get(0);
        UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(
                   SecurityContextHolder.getContext().getAuthentication().getPrincipal(), SecurityContextHolder.getContext().getAuthentication().getCredentials());

        Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        newGreenBususer=(GreenBusUser)principal;

        logger.debug("newGreenBususerDetails---->>>"+newGreenBususer.toString());

        newGreenBususer.setFirstName(newuser.getFirstName());
        newGreenBususer.setLastName(newuser.getLastName());

        if(newGreenBususer.getFirstName()!=null) {
            logger.debug("got my first name");
        }
        if(newGreenBususer.getLastName()!=null) {
            logger.debug("got my last name");
        }

        auth.setDetails(newGreenBususer);       
        SecurityContext context = SecurityContextHolder.getContext();
        context.setAuthentication(auth);
        SecurityContextHolder.setContext(context);
        model.addAttribute("user", getPrincipalDisplay());
        model.addAttribute("userData", list);
        model.addAttribute("check", true);
        return "GreenBus_updateProfile_User";
    }

Сначала он устанавливает имя и фамилию в GreenBusUser , а затем при перезагрузке страницы появляется метод setDetails , когда он говорит: Пользователь не найден , когдаЯ вызываю getUserObject () метод в верхней части этого метода.

private X2CUser getUserObject() {
        X2CUser userName = null;
        Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();

        if (principal instanceof UserDetails) {
            userName = ((X2CUser) principal);
        } else {
            logger.info("No user found");

        }
        return userName;
    }

Ответы [ 3 ]

0 голосов
/ 01 июня 2018

Попробуйте этот код .. Это может помочь вам.

UsernamePasswordAuthenticationToken authReq = new UsernamePasswordAuthenticationToken(user, pass);
Authentication auth = authManager.authenticate(authReq);
SecurityContext sc = SecurityContextHolder.getContext();
securityContext.setAuthentication(auth);
0 голосов
/ 07 июня 2018

Я наконец-то решил свою проблему, хотя позже добавил код в раздел вопросов в разделе ОБНОВЛЕНИЕ.

 Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        newGreenBususer=(GreenBusUser)principal;


        newGreenBususer.setFirstName(newuser.getFirstName());
        newGreenBususer.setLastName(newuser.getLastName());

Да, это все, что нужно сделать.

Эта часть --- >>

    auth.setDetails(newGreenBususer);       
    SecurityContext context = SecurityContextHolder.getContext();
    context.setAuthentication(auth);
    SecurityContextHolder.setContext(context);

устанавливает новый контекст, делая безопасность, указывающую на null, когда я перезагружаюсь, все еще не ясно, потому что я устанавливаю детали до перезагрузки, так что я получаю новый контекст , но я установил новые данные пользователя.

Хотя я наконец-то решил свою проблему, но если кто-то сможет пролить свет на то, почему это происходит, я приму его / ее ответ.

Большое спасибо за вашу поддержку.Продолжайте учиться!

0 голосов
/ 31 мая 2018

Если вы обновляете пароль, то будет хорошо выйти из системы и попросить его перерегистрировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...