项目应用:建立解释器完成对用户的获取
来源:互联网 发布:淘宝野马软件视频 编辑:程序博客网 时间:2024/06/06 18:24
首选说下要求背景,用户通过网站登录后会将用户的基本信息记录在session,而当有请求需要用到用户信息的时候,每个方法都需要自己从session中拉取用户信息,而获取不到时还需要去处理跳转登录的操作,十分麻烦。因此考虑到开发的方便性,希望可以用到注解的方式直接将用户信息封装好,作为参数传递给各个请求。
首先有个用户的Vo类
public class UserVO { private int id=0;private String ticket=""; //唯一证书private String username=""; //用户名private String nickname="";//昵称private String avatar="";//头像private int gender=0;// 性别private String phone="";//电话private String email="";//邮箱private int role=0;//用户权限//认证信息private String access_token="";private String refresh_token=""; private Integer expires_in=0;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;} public String getNickname() {return nickname;}public void setNickname(String nickname) {this.nickname = nickname;}public String getAvatar() {return avatar;}public void setAvatar(String avatar) {this.avatar = avatar;}public int getGender() {return gender;}public void setGender(int gender) {this.gender = gender;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;} public String getTicket() { return ticket; } public void setTicket(String ticket) { this.ticket = ticket; }public int getId() {return id;}public void setId(int id) {this.id = id;} public String getAccess_token() {return access_token;}public void setAccess_token(String access_token) {this.access_token = access_token;}public String getRefresh_token() {return refresh_token;}public void setRefresh_token(String refresh_token) {this.refresh_token = refresh_token;}public Integer getExpires_in() {return expires_in;}public void setExpires_in(Integer expires_in) {this.expires_in = expires_in;}public int getRole() {return role;}public void setRole(int role) {this.role = role;} }
建立个参数级的注解,用于注入用户信息
@Target({ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface UserVo {/** * The URI template variable to bind to. */String value() default "";}建立解释器从session中获得用户
public class UserArgumentResolver implements HandlerMethodArgumentResolver{/** * 定义解释器支持解析的参数 */@Overridepublic boolean supportsParameter(MethodParameter parameter) {return parameter.getParameterAnnotation(UserVo.class) != null; }@Overridepublic UserVO resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { HttpServletRequest request= (HttpServletRequest) webRequest.getNativeRequest(); //从session中获取用户信息 UserVO userInfo=(UserVO)request.getSession().getAttribute("userInfo"); return userInfo; }}最后在xml中加入解释器
<mvc:annotation-driven> <mvc:argument-resolvers> <!-- 自定义标签获得UserVO--> <bean class="com.xiaoma.universe.common.interceptor.UserArgumentResolver" /> </mvc:argument-resolvers> </mvc:annotation-driven>配合拦截器一起使用,当请求发生的时候先进入拦截器判断session中的用户信息是否为null,不为空进入解释器获取,为空直接进入登录页面
定义拦截器:
public class UserInterceptor implements HandlerInterceptor{ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object obj, Exception err) throws Exception { } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object obj, ModelAndView mav) throws Exception { } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception { HttpSession session = request.getSession();UserVO userInfo = (UserVO) session.getAttribute("userInfo");String url = request.getRequestURI();if((userInfo==null){//不符合条件的,跳转到登录界面 response.sendRedirect("/login");return false; }request.setAttribute("userInfo", userInfo);return true; } }xml中配置拦截规则
<mvc:interceptors><mvc:interceptor><mvc:mapping path="/*"/><bean class="xx.xx.xx.UserInterceptor"></bean></mvc:interceptor></mvc:interceptors>
0 0
- 项目应用:建立解释器完成对用户的获取
- 应用函数对用户的建立和删除
- 项目应用:使用自定义注解完成对controller的aop控制
- 【解释】对用户透明=对用户隐蔽:关系模型的存取路径对用户透明
- oracle命令 建立用户和对用户的管理
- Android项目实战--手机卫士22--卸载和分享功能的完成以及用户及系统应用的切换
- 项目应用:web项目从拦截请求获取用户
- 编写php程序完成对用户表显示的步骤
- 获取用户安装的手机应用源码
- 使用nginx后如何在web应用中获取用户ip及原理解释
- 使用nginx后如何在web应用中获取用户ip及原理解释
- 使用nginx后如何在web应用中获取用户ip及原理解释
- 使用Nginx后如何在web应用中获取用户ip及原理解释
- 使用nginx后如何在web应用中获取用户ip及原理解释
- 使用nginx后如何在web应用中获取用户ip及原理解释
- 使用nginx后如何在web应用中获取用户ip及原理解释GOOD
- 使用Nginx后如何在web应用中获取用户ip及原理解释
- 使用Nginx后如何在web应用中获取用户ip及原理解释
- Java中常见的名词解释集合
- 虚函数的识别2
- Stanford CoreNLP 3.6.0 使用入门
- com.sun.xml.internal.ws.model.RuntimeModelerException: class:com.mark.cxf.service could not be found
- Tomcat源码解析(十):启动和关闭
- 项目应用:建立解释器完成对用户的获取
- UVA 11346
- web安全 XML实体注入风险
- Android使用adb抓取log
- 学习笔记14——CentOS 7系统中vim的配置
- EventBus简单使用和源码解析
- 2-段寄存器
- 音频资源地址
- UML学习2 - 用例图