SpringMVC-利用filter实现安全登录
2017-12-14 09:18
519 查看
安全登录,不同与普通登录。
安全登录是什么呢?就是只要用户名和密码不正确,除了登陆页面,其他页面你进不去,这就是安全登录。
刚开始,用springmvc自带的拦截器试了一下,效果出来了,但是发现了个问题,就是只能拦截到处理器的请求,其他请求不能拦截,比如我在地址栏里输入一个地址,依然可以跳转,这就很不好,为此,我选用了filter过滤器来进行过滤。
代码如下:
首先是过滤器的代码:
public void doFilter(ServletRequest servletrequest, ServletResponse servletresponse, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest) servletrequest;
HttpServletResponse response=(HttpServletResponse) servletresponse;
String servletPath = request.getServletPath();
System.out.println("servletPath"+servletPath);
Object session = request.getSession().getAttribute("pro");
System.out.println("session="+session);
//只要用户回到登录页面,就把session销毁,这样就需要重新登录
if(servletPath.contains("/html/login.jsp") || servletPath.contains(" ")){
System.out.println("销毁session");
request.getSession().removeAttribute("pro");
}
//如果用户没有登录是不能直接进入其他页面的
if(session != null){
System.out.println("---------放行------------");
chain.doFilter(request, response);
return;
}
else{
System.out.println("===进入判断体===");
request.getRequestDispatcher("/html/login.jsp").forward(request, response);
}
}再来看web.xml的配置:
<!-- 注册自定义过滤器,实现安全登录 -->
<filter>
<filter-name>myfilter</filter-name>
<filter-class>com.aynu.interceptor.myfilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myfilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
当然,我们可以用init,将/html/login.jsp写进去,在filter获取到再利用,这样在后续维护中会很方便。
这个时候,图片呀什么的可能不能显示,那怎么办呢?
这样,先看在web.xml里的配置:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/css</url-pattern>
<url-pattern>/js</url-pattern>
<url-pattern>/images</url-pattern>
<url-pattern>/jq</url-pattern>
<url-pattern>/jquery-3.2.1.js</url-pattern>
<url-pattern>/jquery-form.js</url-pattern>
</servlet-mapping>
载看spring-mvc.xml里配置:
<mvc:default-servlet-handler/>
这个时候,我们想要的功能基本已经实现,没有登录在地址栏无论输入哪个地址,是进不去的,但是问题来了,假如我们用户名密码不存在或者错误呢?依然可以进入,这时候,就需要在处理器中做这样的逻辑了:
//返回登录页面
@RequestMapping("/login.do")
public String login(){
return "/html/login.jsp";
}
//接收登录信息
@RequestMapping(value="/some.do",method=RequestMethod.POST)
@ResponseBody
public ModelAndView pro(Pro pro,RedirectAttributes re,HttpSession seesion,HttpServletRequest request){
boolean x=service.selectPro(pro);
ModelAndView mv = new ModelAndView();
seesion.setAttribute("pro", pro);
if(x == false){
request.getSession().removeAttribute("pro");
mv.setViewName("redirect:/pro/login.do");
return mv;
}
//mv.addObject("re", "xxx");
//re.addFlashAttribute("re", "用户名或密码错误");
mv.setViewName("redirect:/html/index.jsp");
System.out.println("=====");
return mv;
}
OK,效果达到,如果哪位大牛有更好的方法,请在下面留言。
希望我们共同学习和进步。
安全登录是什么呢?就是只要用户名和密码不正确,除了登陆页面,其他页面你进不去,这就是安全登录。
刚开始,用springmvc自带的拦截器试了一下,效果出来了,但是发现了个问题,就是只能拦截到处理器的请求,其他请求不能拦截,比如我在地址栏里输入一个地址,依然可以跳转,这就很不好,为此,我选用了filter过滤器来进行过滤。
代码如下:
首先是过滤器的代码:
public void doFilter(ServletRequest servletrequest, ServletResponse servletresponse, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest) servletrequest;
HttpServletResponse response=(HttpServletResponse) servletresponse;
String servletPath = request.getServletPath();
System.out.println("servletPath"+servletPath);
Object session = request.getSession().getAttribute("pro");
System.out.println("session="+session);
//只要用户回到登录页面,就把session销毁,这样就需要重新登录
if(servletPath.contains("/html/login.jsp") || servletPath.contains(" ")){
System.out.println("销毁session");
request.getSession().removeAttribute("pro");
}
//如果用户没有登录是不能直接进入其他页面的
if(session != null){
System.out.println("---------放行------------");
chain.doFilter(request, response);
return;
}
else{
System.out.println("===进入判断体===");
request.getRequestDispatcher("/html/login.jsp").forward(request, response);
}
}再来看web.xml的配置:
<!-- 注册自定义过滤器,实现安全登录 -->
<filter>
<filter-name>myfilter</filter-name>
<filter-class>com.aynu.interceptor.myfilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myfilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
当然,我们可以用init,将/html/login.jsp写进去,在filter获取到再利用,这样在后续维护中会很方便。
这个时候,图片呀什么的可能不能显示,那怎么办呢?
这样,先看在web.xml里的配置:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/css</url-pattern>
<url-pattern>/js</url-pattern>
<url-pattern>/images</url-pattern>
<url-pattern>/jq</url-pattern>
<url-pattern>/jquery-3.2.1.js</url-pattern>
<url-pattern>/jquery-form.js</url-pattern>
</servlet-mapping>
载看spring-mvc.xml里配置:
<mvc:default-servlet-handler/>
这个时候,我们想要的功能基本已经实现,没有登录在地址栏无论输入哪个地址,是进不去的,但是问题来了,假如我们用户名密码不存在或者错误呢?依然可以进入,这时候,就需要在处理器中做这样的逻辑了:
//返回登录页面
@RequestMapping("/login.do")
public String login(){
return "/html/login.jsp";
}
//接收登录信息
@RequestMapping(value="/some.do",method=RequestMethod.POST)
@ResponseBody
public ModelAndView pro(Pro pro,RedirectAttributes re,HttpSession seesion,HttpServletRequest request){
boolean x=service.selectPro(pro);
ModelAndView mv = new ModelAndView();
seesion.setAttribute("pro", pro);
if(x == false){
request.getSession().removeAttribute("pro");
mv.setViewName("redirect:/pro/login.do");
return mv;
}
//mv.addObject("re", "xxx");
//re.addFlashAttribute("re", "用户名或密码错误");
mv.setViewName("redirect:/html/index.jsp");
System.out.println("=====");
return mv;
}
OK,效果达到,如果哪位大牛有更好的方法,请在下面留言。
希望我们共同学习和进步。
相关文章推荐
- 利用filter实现安全登录
- Servlet与filter实现:利用Cookie实现两周内不用重复登录的效果
- 利用过滤器(Filter)实现自动登录功能
- 利用Filter实现用户自动登录
- java web项目利用Filter进行单点登录的简单实现
- Servlet与filter实现:利用Cookie实现两周内不用重复登录的效果
- Filter二(利用Filter实现简单的登录验证)
- ???SpringMVC_02 学习分层思想,利用分层实现telecom的登录模块
- JavaEE之--------利用过滤器实现用户自动登录,安全登录,取消自动登录黑用户禁止登录
- 利用Cookie实现自动登录,尽量做到安全
- Java 利用过滤器Filter 实现登录过滤
- javaee初识-利用Filter实现登录验证
- Struts2中利用filter、session实现安全访问和身份认证
- JavaEE之--------利用过滤器实现用户自动登录,安全登录,取消自动登录黑用户禁止登录
- java web项目利用Filter进行单点登录的简单实现(解决方案)
- AOP实践--利用MVC5 Filter实现登录状态判断
- 利用Filter技术解决中文乱码的简单实现
- Android:利用SharedPreferences实现自动登录
- PHP永久登录、记住我功能实现方法和安全做法
- 利用Cookies实现ASP.NET跨域单点登录