IT修真院·坑乎 | Java(后端),CSS(前端),JavaScript(前端),PM(产品经理),UI(交互设计),QA(测试),Android(安卓APP),iOS(苹果APP),OP(运维),Python(后端)日常在线问答学习平台
咨询电话 : 010-59478634
切换导航
首页
我的提问
我的回答
我的点赞
消息通知
个人主页
×
提示
尚未登陆,前往官网登陆?
×
提示
尚未登陆,前往官网登陆?
CSS
JS
Android
IOS
JAVA
OP
PM
UI
QA
求职辅导
Python
运营
动画师
AIGC
CSS
JS
Android
IOS
JAVA
OP
PM
UI
QA
求职辅导
Python
运营
动画师
AIGC
所有任务
任务1
任务2
任务3
任务4
任务5
任务6
任务7
任务8
任务9
任务10
任务11
全部
问题
已收录
问题
未收录
问题
没有找到答案,去提问>>>
tomcat集群同步
1
1
会话管理
class="cursor-pointer"> 详细描述
服务器端两个tomcat加nginx实现负载均衡,登录问题的话如何实现两个服务器同步,看到网上说用memcache,但是并发大的时候不太好用,请问还有其他的什么好的方法吗
jemter性能测试的参数究竟怎么看,什么是偏离?
0
1
class="cursor-pointer"> 详细描述
jemter性能测试的参数究竟怎么看,什么是偏离?
为什么要对用户名和登录时间进行DES加密
1
1
md5/des
class="cursor-pointer"> 详细描述
可以使用其他加密吗,或者说可以加密其他属性吗
拦截器和过滤器都能实现登陆拦截的功能,但是为什么都使用拦截器
1
1
interceptor
class="cursor-pointer"> 详细描述
拦截器和过滤器的区别在于实现的方式,过滤器在容器启动的时候就已经初始化,而拦截器不是,这里是为什么要使用拦截器,有什么好处?
拦截器不起作用
1
1
interceptor
class="cursor-pointer"> 详细描述
拦截器拦截不到指定的页面
class="cursor-pointer"> 源码
public class LoginInterceptor implements HandlerInterceptor { private static Logger logger = Logger.getLogger(LoginInterceptor.class); @Autowired UserService userService; //ture表示继续流程,false表示中断流程,不会继续调用拦截器 @Override public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception { //获取request的cookie Cookie[] cookies = httpServletRequest.getCookies(); //如果httpServletRequest里的cookies为空,就从httpServletResponse的header拿token.拿到后解析 //如果cookies的长度等于0,表示没有cookies,返回登录页面,让用户登录一下,发给用户一个cookie,下次光临的时候用户就有cookie了 if (cookies == null && cookies.length > 0){ logger.info("don't have cookie"); //从httpServletRequest.getHeader拿出token,然后解密 String token = httpServletRequest.getHeader("token"); DesUtil desUtil = new DesUtil(); //取出明文 String mw = desUtil.decrypt(token); //分割字符串 String[] fg = mw.split("\\|"); logger.info("时间戳:"+fg[0].toString()); //取出数字 String timeStamp = fg[0]; Long time = desUtil.decryptToLong(timeStamp); logger.info("时间:"+time); //判断时间戳是否过期 if (System.currentTimeMillis()- time >= 60 * 60 * 1000){ logger.info("token过期"); httpServletResponse.sendRedirect("/goLogin"); return false; } else { String ids = fg[2]; logger.info("用户id:"+ids); Long idis = desUtil.decryptToLong(ids); logger.info("id是:" +idis); //判断是否合法 User user =userService.selectById(idis); logger.info("查到的数据:"+user); //如果为空,就返回登录页面 if (user==null){ httpServletResponse.sendRedirect("/goLogin"); return false; } return true; } }else { logger.info("you have cookie"); //遍历cookies,放入cookie看下是否对应 for (int i = 0; i < cookies.length; i++){ logger.info("cookieName:"+cookies[i].getName()); logger.info("cookieValue"+cookies[i].getValue()); //如果他的cookie与我给他发的token名字相等,那么可以返到页面里 if (cookies[i].getName().equals("token")){ logger.info("token:"+cookies[i].getValue()); String token = cookies[i].getValue(); //解token,取出id 判断id是否不为空, 不为空,去数据库里查这个id对应的用户是否存在,存在通过拦截器,不存在返回 DesUtil desUtil = new DesUtil(); //取出token明文 String mw = desUtil.decrypt(token); String[] str = mw.split("\\|"); String timeStamp = str[0]; Long time = Long.valueOf(timeStamp); if (System.currentTimeMillis() - time>= 60*60 *1000) { logger.info("token过期"); //返回登录页面 httpServletResponse.sendRedirect("/goLogin"); return false; } String idstr = str[2]; Long id = Long.valueOf(idstr); User user = userService.selectById(id); if (user==null){ httpServletResponse.sendRedirect("/goLogin"); return false; } } return true; } } //没有找到登录状态则重定向回登录页面,返回false,不执行controller的方法 httpServletResponse.sendRedirect("/goLogin"); return false; }
拦截器和过滤器的区别
0
1
class="cursor-pointer"> 详细描述
除了是否依赖容器、拦截请求数量、处理前后顺序以外,实际的效果感觉没有啥区别,有什么实际性的区别吗,比如某些情况只能用其中一个,用另一个就不行的例子
interceptor要怎么使用,会达到什么效果?
1
1
interceptor
class="cursor-pointer"> 详细描述
filter现在只用于过滤请求编码格式,interceptor要怎么使用,达到什么效果才是正确的使用了interceptor?
设置注册的用户名和密码不为空,创建一个校验器,但是运行时会提示请求不对。
0
1
class="cursor-pointer"> 详细描述
这是我的entity类的注解,因为就是用户的用户名和密码不能为空。 @NotBlank(message = "请填写用户名,用户名不能为空") private String userName; @NotBlank(message = "请输入你要设置的密码,密码不能为空") private String passWord; 再就是我的contoller中设置一个参数校验。 //注册 @RequestMapping(value = "/register",method = RequestMethod.POST) public String register(@Validated User user, BindingResult result){ if (user.getUserName()==null ||user.getPassWord()==null || result.hasErrors()) { List
allErrors = result.getAllErrors(); for (ObjectError objectError : allErrors) { System.out.println(objectError.getDefaultMessage()); } return "redirect:/login/1"; //注册时用户名或密码为空,重新注册 } if (userService.register(user)!=0){ logger.info("注册成功,返回登录界面"); return "registerSuccess"; }else { logger.debug("注册失败,用户名已存在"); return "redirect:/login/1"; //重定向到跳转注册而页面 } }
class="cursor-pointer"> 错误截图
主要就是最后的一句话。 2019-07-02 16:04:50,872 [http-nio-8080-exec-6] WARN org.springframework.web.servlet.PageNotFound - Request method 'GET' not supported 我的程序启动都没有问题,最后还是没有校验。
1.服务器上的token存储到数据库中,每次查询会不会很费时。
1
1
会话管理
class="cursor-pointer"> 详细描述
1.服务器上的token存储到数据库中,每次查询会不会很费时。如果不存储到数据库,应该存储到哪里呢。 2.客户端得到的token肯定要加密存储的,发送token的时候再解密。存储到数据库还是配置文件呢?
token和cookie的关系
1
1
会话管理
class="cursor-pointer"> 详细描述
任务5中,使用DES加密当前时间和登录用户ID达到生成token的目的,然后再把token放入cookie中,下次继续浏览网页的时候,通过提取cookie中的token,然后解密达到登录的目的,那么 自动登录底层执行的到底是什么方法?能否详细解释一下
首页
<
2
3
4
5
6
7
8
9
>
末页
去第
页
确定
Copyright ©2015 北京葡萄藤信息技术有限公司 All Rights Reserved | 京ICP备15035574号-1
52
5
10