国外游戏代码网站,小程序开发定制外包,做网站实名认证总是失败怎么回事,建站服务是什么框架 controller 控制层 dao 持久层 interceptor 拦截器 model 实体层 uils 工具类 service 业务层 resources 资源文件层 mapper 放编写sql语句的文件#xff0c;与持久层的文件对应
具体代码
Controller
//控制层
public class UserController {
//用于调用Servic…框架 controller 控制层 dao 持久层 interceptor 拦截器 model 实体层 uils 工具类 service 业务层 resources 资源文件层 mapper 放编写sql语句的文件与持久层的文件对应
具体代码
Controller
//控制层
public class UserController {
//用于调用Service层方法Autowiredprivate IUserService userService;
//注册RequestMapping(value /register,method RequestMethod.POST)ResponseBodypublic Result register(RequestBody User user){return userService.register(user);}
//登录RequestMapping(value /login,method RequestMethod.POST)ResponseBodypublic Result login(RequestBody User user){return userService.login(user);}
//注销RequestMapping(value /logout)ResponseBodypublic Result logout(RequestHeader(token) String token){return userService.logout(token);}
//用于展示首页RequestMapping(value /show)ResponseBodypublic Result show(){return Result.ok(成功,首页);}}//持久层
//状态码方法
public interface TokenMapper {
//保存到数据库int insert(Param(token) String token, Param(userid) int id);
//查看Integer selectByToken(String token);
//删除void deleteByToken(String token);
}
//用户数据库
public interface UserMapper {
//插入数据也就是注册的int insert(User user);
//通过username查询用于注册查重User findUserByUsername(String username);
//登录方法User findUserByUsernameAndPassword(Param(username) String username, Param(password) String password);
}//拦截器
Controller
public class UserInterceptor implements HandlerInterceptor {
//调用持久层的方法Autowiredprivate TokenMapper tokenMapper;Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//获取状态码String token request.getHeader(token);//如果状态码不为空或者空字符串if (token!nulltoken!){Integer id tokenMapper.selectByToken(token);//如果不为空且查到存在状态码返回trueif (id!nullid0){return true;}}//反之就是权限不够String string JSON.toJSONString(Result.error(500, 权限不够));response.getWriter().println(string);return false;}
//后置Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);}
//最终Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {HandlerInterceptor.super.afterCompletion(request, response, handler, ex);}
}public class ResultT implements Serializable {
//返回状态private static final long serialVersionUID 1L;/*** 成功标志*/private boolean success true;/*** 返回处理消息*/private String message 操作成功;/*** 状态码*/private Integer code 0;/*** 返回数据对象 data*/private T result;public static long getSerialVersionUID() {return serialVersionUID;}public boolean isSuccess() {return success;}public void setSuccess(boolean success) {this.success success;}public String getMessage() {return message;}public void setMessage(String message) {this.message message;}public Integer getCode() {return code;}public void setCode(Integer code) {this.code code;}public T getResult() {return result;}public void setResult(T result) {this.result result;}public long getTimestamp() {return timestamp;}public void setTimestamp(long timestamp) {this.timestamp timestamp;}/*** 时间戳*/private long timestamp System.currentTimeMillis();public Result() {}public ResultT success(String message) {this.message message;this.code 200;this.success true;return this;}public static ResultObject ok() {ResultObject r new ResultObject();r.setSuccess(true);r.setCode(200);r.setMessage(成功);return r;}public static ResultObject ok(String msg) {ResultObject r new ResultObject();r.setSuccess(true);r.setCode(200);r.setMessage(msg);return r;}public static ResultObject ok(String msg,Object obj) {ResultObject r new ResultObject();r.setSuccess(true);r.setCode(200);r.setMessage(msg);r.setResult(obj);return r;}public static ResultObject ok(Object data) {ResultObject r new ResultObject();r.setSuccess(true);r.setCode(200);r.setMessage(成功);r.setResult(data);return r;}public static ResultObject error(String msg) {return error(500, msg);}public static ResultObject error(int code, String msg) {ResultObject r new ResultObject();r.setCode(code);r.setMessage(msg);r.setSuccess(false);return r;}public ResultT error500(String message) {this.message message;this.code 500;this.success false;return this;}/*** 无权限访问返回结果*/public static ResultObject noauth(String msg) {return error(555, msg);}
}//user实体类
Data
NoArgsConstructor
AllArgsConstructor
Builder
public class User {/*** 这是id*/private int id;/*** 这是昵称*/private String nickname;/*** 这是用户名*/private String username;/*** 这是密码*/private String password;/*** 这是年龄*/private int age;/*** 这是手机号*/private String phone;
}//service接口
public interface IUserService {Result register(User user);Result login(User user);Result logout(String token);
}//实现service接口
Service
Transactional
public class UserService implements IUserService {Autowiredprivate UserMapper userMapper;Autowiredprivate TokenMapper tokenMapper;/*** 注册* */Overridepublic Result register(User user) {//用户名校验String username user.getUsername();if (username ! null username ! ) {boolean check RegUtils.check(username, ^(?[a-zA-Z])(?!.*[\\-_]{2})[a-zA-Z0-9\\-_]{8,12}$);if (!check){return Result.error(用户名格式不正确);}}else {return Result.error(用户名不能为空);}
// 是否被注册过User user1 userMapper.findUserByUsername(username);if (user1!null){return Result.error(用户名已存在请重新输入);}
// 密码校验String password user.getPassword();if (password ! null password ! ) {boolean check RegUtils.check(password, ^(?.*[A-Z])(?.*[a-z])(?.*[0-9])(?.*[!#$%^*()_\\-\\[\\]{};:\\\\\|,.\\/?]).{8,}$);if (!check){return Result.error(密码格式不正确);}}else {return Result.error(密码不能为空);}
// 年龄校验int age user.getAge();if(age120||age18){return Result.error(年龄不符合要求);}//手机号的校验String phone user.getPhone();if (phone ! null phone ! ) {boolean check RegUtils.check(phone, ^(1[3-9]\\d{9}$));if (!check){return Result.error(手机号格式不正确);}}else {return Result.error(手机号不能为空);}
// 写入数据库user.setPassword(MD5Utils.encrypt(password));int insert userMapper.insert(user);return insert 0 ? Result.ok(注册成功) : Result.error(注册失败);}/*** 登录*/Overridepublic Result login(User user) {String username user.getUsername();if (username ! null username ! ) {boolean check RegUtils.check(username, ^(?[a-zA-Z])(?!.*[\\-_]{2})[a-zA-Z0-9\\-_]{8,12}$);if (!check) {return Result.error(用户名格式不正确);}} else {return Result.error(用户名不能为空);}String password user.getPassword();if (password ! null password ! ) {boolean check RegUtils.check(password, ^(?.*[A-Z])(?.*[a-z])(?.*[0-9])(?.*[!#$%^*()_\\-\\[\\]{};:\\\\\|,.\\/?]).{8,16}$);if (!check) {return Result.error(密码格式不正确);}} else {return Result.error(密码不能为空);}password MD5Utils.encrypt(password);User user1 userMapper.findUserByUsernameAndPassword(username, password);if(user1!null){String uuid UUID.randomUUID().toString();String token uuid.replace(-, );tokenMapper.insert(token, user1.getId());return Result.ok(登录成功, token);}return Result.error(登录失败);}
//注销Overridepublic Result logout(String token) {if(token!null token!){tokenMapper.deleteByToken(token);}return Result.ok(注销成功);}
}//正则表达式
public class RegUtils {public static boolean check(String target,String regex) {// 正则表达式Pattern pattern Pattern.compile(regex);// 匹配器Matcher matcher pattern.matcher(target);// 匹配if (matcher.matches()) {return true;}return false;}
}//MD5
public static String encrypt(String password){MessageDigest md null;String s null;try {md MessageDigest.getInstance(MD5);md.update(password.getBytes());s new BigInteger(1, md.digest()).toString(16);} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return s;}?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.xinzhi.dao.TokenMapperinsert idinsertinsert into token (token,userid) values (#{token},#{userid})/insertdelete iddeleteByTokendelete from token where token#{token}/deleteselect idselectByToken resultTypejava.lang.Integerselect id from token where token#{token}/select
/mapper?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.LiMou.dao.UserMappersql iduserAllid,nickname,username,password,age,phone/sqlinsert idinsertinsert into user (nickname,username,password,age,phone) values (#{nickname},#{username},#{password},#{age},#{phone})/insertselect idfindUserByUsername resultTypecom.xinzhi.model.Userselect include refiduserAll/ from user where username#{username}/selectselect idfindUserByUsernameAndPassword resultTypecom.xinzhi.model.Userselect include refiduserAll/ from user where username#{username} and password#{password}/select
/mapper?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:contexthttp://www.springframework.org/schema/contextxmlns:txhttp://www.springframework.org/schema/txxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd!--加载properties文件--context:property-placeholder locationclasspath:db.properties/!--数据源--bean iddataSource classcom.alibaba.druid.pool.DruidDataSourceproperty namedriverClassName value${driver}/property nameurl value${url}/property nameusername value${name}/property namepassword value${password}//bean!--开启bean注解扫描--context:component-scan base-packagecom.LiMoucontext:exclude-filter typeannotation expressionorg.springframework.stereotype.Controller//context:component-scan!--事务管理器--bean idtxManager classorg.springframework.jdbc.datasource.DataSourceTransactionManagerproperty namedataSource refdataSource//bean!--开启注解式事务--tx:annotation-driven transaction-managertxManager/!--整合mybatis到spring中--bean classorg.mybatis.spring.SqlSessionFactoryBeanproperty namedataSource refdataSource/property nametypeAliasesPackage valuecom.xinzhi.model/property namemapperLocations valueclasspath:mapper/*.xml/!--分页插件--property namepluginsarraybean classcom.github.pagehelper.PageInterceptorproperty namepropertiespropsprop keyhelperDialectmysql/propprop keyreasonabletrue/prop/props/property/bean/array/property/bean!--映射扫描--bean classorg.mybatis.spring.mapper.MapperScannerConfigurerproperty namebasePackage valuecom.LiMou.dao//bean/beansdb.properties//连接数据库的
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:contexthttp://www.springframework.org/schema/contextxmlns:mvchttp://www.springframework.org/schema/mvcxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdcontext:component-scan base-packagecom.xinzhi.controller/mvc:annotation-driven !-- 消息转换器 --mvc:message-converters register-defaultstruebean classorg.springframework.http.converter.StringHttpMessageConverterproperty namesupportedMediaTypes valuetext/plain;charsetUTF-8//bean/mvc:message-converters/mvc:annotation-driven!-- 视图解析器--bean classorg.springframework.web.servlet.view.InternalResourceViewResolverproperty nameprefix value/WEB-INF/page//property namesuffix value.jsp//bean!-- 多媒体解析器--bean idmultipartResolver classorg.springframework.web.multipart.commons.CommonsMultipartResolverproperty namedefaultEncoding valueUTF-8/property namemaxUploadSize value500000//beanmvc:interceptorsmvc:interceptormvc:mapping path/**/mvc:exclude-mapping path/register/mvc:exclude-mapping path/login/bean classcom.xinzhi.interceptor.UserInterceptor//mvc:interceptor/mvc:interceptors/beans//依赖
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.xinzhi/groupIdartifactIdconformity1/artifactIdpackagingwar/packagingversion1.0-SNAPSHOT/versionnameconformity1 Maven Webapp/nameurlhttp://maven.apache.org/urldependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion3.8.1/versionscopetest/scope/dependencydependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.3/version/dependency!--mysql环境--dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.31/version/dependency!--spring整合jdbc--dependencygroupIdorg.springframework/groupIdartifactIdspring-jdbc/artifactIdversion5.1.9.RELEASE/version/dependency!--spring整合mybatis--dependencygroupIdorg.mybatis/groupIdartifactIdmybatis-spring/artifactIdversion2.0.3/version/dependency!--druid连接池--dependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion1.1.16/version/dependency!--分页插件坐标--dependencygroupIdcom.github.pagehelper/groupIdartifactIdpagehelper/artifactIdversion5.1.2/version/dependency!--springmvc环境--dependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion5.1.9.RELEASE/version/dependency!--jackson相关坐标3个--dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.9.0/version/dependency!--servlet环境--dependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion3.1.0/versionscopeprovided/scope/dependencydependencygroupIdcommons-fileupload/groupIdartifactIdcommons-fileupload/artifactIdversion1.4/version/dependency!--junit单元测试--dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/version/dependency!--spring整合junit--dependencygroupIdorg.springframework/groupIdartifactIdspring-test/artifactIdversion5.1.9.RELEASE/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.24/version/dependencydependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion1.2.4/version/dependency/dependenciesbuildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-war-plugin/artifactIdversion3.3.2/version/plugin/pluginsfinalNameconformity1/finalName/build
/project