栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Spring Boot-登录后返回用户对象

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Boot-登录后返回用户对象

如果我正确理解了您的问题,则可以提出建议。

首先,您必须实现类,其中将包含用户信息。此类必须继承自

org.springframework.security.core.userdetails.User

public class CustomUserDetails extends User {    public CustomUserDetails(String username, String password,         Collection<? extends GrantedAuthority> authorities) {         super(username, password, authorities);    }    //for example lets add some person data private String firstName;    private String lastName;    //getters and setters}

下一步,您将创建自己的接口实现

org.springframework.security.core.userdetails.UserDetailsService

@Servicepublic class CustomUserDetailService implements UserDetailsService{    @Override    public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException{        if(StringUtils.isEmpty(userName))  throw new UsernameNotFoundException("User name is empty");        //if you don't use authority based security, just add empty set        Set<GrantedAuthority> authorities = new HashSet<>();        CustomUserDetails userDetails = new CustomUserDetails(userName, "", authorities);        //here you can load user's data from DB or from         //any other source and do:        //userDetails.setFirstName(firstName);        //userDetails.setLastName(lastName);        return userDetails;    }}

如您所见,此类只有一个方法,您可以在其中加载和设置自定义用户详细信息。注意,我用

@Service
注释标记了该类。但是您可以在Java-
config或XML上下文中注册它。

现在,要在成功通过身份验证后访问用户数据,可以使用下一种方法,当Spring将自动通过控制器方法传递主体时:

@Controllerpublic class MyController{    @RequestMapping("/mapping")    public String myMethod(Principal principal, ModelMap model){        CustomUserDetails userDetails = (CustomUserDetails)principal;        model.addAttribute("firstName", userDetails.getFirstName());        model.addAttribute("lastName", userDetails.getLastName());    }}

或另一种方式:

@Controllerpublic class MyController{    @RequestMapping("/mapping")    public String myMethod(ModelMap model){        Authentication auth = SecurityContextHolder.getContext().getAuthentication();        CustomUserDetails userDetails = (CustomUserDetails)auth.getPrincipal();        model.addAttribute("firstName", userDetails.getFirstName());        model.addAttribute("lastName", userDetails.getLastName());    }}

该方法可以在Spring不自动通过主体的其他地方使用。

要在成功通过身份验证后转到特定地址,可以使用

SimpleUrlAuthenticationSuccessHandler
。只需在您的配置中创建它:

@Beanpublic SavedRequestAwareAuthenticationSuccessHandler successHandler() {    SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();    successHandler.setTargetUrlParameter("/succeslogin");    return successHandler;}

并在您的配置中使用它:

http.formLogin()    .loginProcessingUrl("/login")    .permitAll()    .usernameParameter("email")    .passwordParameter("pass")    .successHandler(successHandler())

之后,您可以创建控制器,它将发送来自特定网址的响应:

@Controller@RequestMapping("/sucesslogin")public class SuccessLoginController{     @RequestMapping(method = RequestMethod.POST)     public String index(ModelMap model, Principal principal){         //here you can return view with response     }}

当然,您不仅可以返回视图,还可以返回JSON响应(使用

@ResponseBody
批注)或其他方式,这取决于您的前端。希望这会有所帮助。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/635655.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号