SpringMVC-Interceptor拦截Session登录
背景:
开发的项目都须要账号password登录才干够查看站点的内容,所以我们设计时须要考虑,用户进入站点仅仅能从一个我们设计的规范通道进入即通过注冊的账号password登录,其它方法都是非法的和不同意的,所以我们就要对非法的訪问进行拦截并跳转到用户登录页面。
这里主要是讲SpringMVC拦截器Interceptor的相关配置和介绍。
首先新建一个自己定义的拦截器:
LoginInterceptor.java
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import org.apache.log4j.Logger;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import com.sgcc.uds.fs.client.UserToken; /**
* @author lyx
*
* 2015-8-17上午9:53:23
*
*
*登录拦截器
*/
public class LoginInterceptor implements HandlerInterceptor { //日志
protected Logger log = Logger.getLogger(getClass()); public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handle) throws Exception { //创建session
HttpSession session =request.getSession(); //无需登录。同意訪问的地址
String[] allowUrls =new String[]{"/toLogin","/login"}; //获取请求地址
String url =request.getRequestURL().toString(); //获得session中的用户
UserToken user =(UserToken) session.getAttribute("userToken"); for (String strUrl : allowUrls) {
if(url.contains(strUrl))
{
return true;
}
} if(user ==null)
{
throw new UnLoginException("您尚未登录! "); }
//重定向
//response.sendRedirect(request.getContextPath()+"/toLogin"); return true; } @Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub } @Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub } }
新建一个登录失败异常类:
(注:也能够不建这个类直接在拦截器中进行重定向)
UnLoginException.java
import java.io.IOException; /**
* @author lyx
*
* 2015-8-17上午10:57:24
*
*fs-config-web.com.sgcc.uds.fs.config.web.interceptor.UnLoginException
*登录失败异常类
*/
public class UnLoginException extends Exception{ /**
*
*/
private static final long serialVersionUID = 1L; public UnLoginException() {
super();
// TODO Auto-generated constructor stub
} public UnLoginException(String message) throws IOException {
super(message);
// TODO Auto-generated constructor stub
} }
SpringMVC配置文件:
ApplicationContext-config-web.xml
<!-- 拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 拦截所有地址 -->
<mvc:mapping path="/**"/>
<!-- 登录拦截类 -->
<bean id="loginInterceptor" class="com.sgcc.uds.fs.config.web.interceptor.LoginInterceptor">
</bean>
</mvc:interceptor>
</mvc:interceptors> <!-- 异常 -->
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<登录失败异常类>
<prop key="com.sgcc.uds.fs.config.web.interceptor.UnLoginException">redirect:/toLogin</prop>
</props>
</property>
</bean>
LoginController.java
import java.util.Map; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody; import com.sgcc.uds.fs.client.UserToken;
import com.sgcc.uds.fs.config.web.util.ResultUtil; @Controller
public class LoginController { @RequestMapping(value = "/", method = RequestMethod.GET)
public String welcome(HttpServletRequest request){
//TODO 推断有无session,有直接到首页
if(request.getSession().getAttribute("userToken")!=null)
{
return "/index";
} return "login";
}
@RequestMapping(value = "/toLogin", method = RequestMethod.GET)
public String toLogin(HttpServletRequest request){ //TODO 推断有无session。有直接到首页
if(request.getSession().getAttribute("userToken")!=null)
{
return "/index";
} return "login";
} @RequestMapping(value = "/login", method = RequestMethod.POST)
@ResponseBody
public Map<String, Object> login(@RequestParam(required=true,value="loginName") String loginName, @RequestParam(required=true,value="pwd") String pwd,HttpServletRequest request){
ResultUtil result = new ResultUtil();
try
{
if(null != loginName && loginName.equals("admin") && null != pwd && pwd.equals("admin") ){
//TODO 登陆成功,保存session HttpSession session =request.getSession(); UserToken userToken =new UserToken("admin","admin", "bucketName"); session.setAttribute("userToken",userToken); //设置超时无效
//session.setMaxInactiveInterval(20); }else{
result.setSuccess(false);
result.setMsg("username或password错误!");
} } catch (Exception e)
{
result.setSuccess(false);
result.setMsg("系统内部异常!");
}
return result.getResult();
} }
这样就能够实现对用户非法訪问站点进行拦截,保证站点的安全性。
SpringMVC-Interceptor拦截Session登录的更多相关文章
- SpringMvc中Interceptor拦截器用法
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆等. 一. 使用场景 1 ...
- SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系
摘自: http://blog.csdn.net/xiaoyaotan_111/article/details/53817918 一 简介 (1)过滤器: 依赖于servlet容器.在实现上基于函数回 ...
- SpringMVC中的Interceptor拦截器及与Filter区别
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...
- SpringMVC中使用Interceptor拦截器
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...
- SpringMVC 中的Interceptor 拦截器
1.配置拦截器 在springMVC.xml配置文件增加: <mvc:interceptors> <!-- 日志拦截器 --> <mvc:interceptor> ...
- [转]SpringMVC中使用Interceptor拦截器
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...
- SpringMvc中的Interceptor拦截器的学习
拦截器是SpringMvc框架中常用的一个东东,它跟Filter相似,但是也有区别,以前也没用过,今天看到就顺便学习了一下. SpirngMvc中的Interceptor主要是通过HandlerInt ...
- SpringMVC之七:SpringMVC中使用Interceptor拦截器
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...
- SpringMVC中使用Interceptor拦截器顺序
一.简介 SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验 证,或者是来判断用户是否登陆,或者是像1 ...
随机推荐
- nginx 限制ip/限制访问路径
一.多站点统一限IP vim nginx.conf allow 127.0.0.1; deny all; # 以上代码解释: # deny all; 限制所有的ip # allow ip; 除了 这个 ...
- vcpkg错误分析方法
最近在使用vcpkg时,经常会碰到CMake错误. 有些以前能编译通过的包, 过一段时间又不能编译错误了. 错误提示一般是CMake错误, 弄得很郁闷. 我采用以下步骤解决了问题: 分析错误 查看错误 ...
- 前端(小程序)项目Aes.js/Md5.js加密的处理方法
做项目中需要对前端数据加密传输这个时候需要用到前端加密的算法主要是:Aes.js,Md5.js 一.Vue项目用到的aes.js加密. 1.直接在index.html引入aes.js或者在npm in ...
- java三大版本解析
JAVA三大版本代表着JAVA技术的三个应用领域:JAVASE.JAVAME.JAVAEE. JAVA以前很长一段时间被称为JAVA2,所以现在很多人习惯称为J2SE.J2ME.J2EE,它们表示的含 ...
- jQuery基本选择器模块(二)
选择器模块 1.push方法的兼容性(了解) 问题:IE8不支持aplly方法中的第二个参数是 伪数组 目标:实现 push 方法的浏览器兼容性问题 var push = [].push; try { ...
- c++ windows与linux通信中文乱码问题解决方法
在linux中默认编码方式是UTF-8,在Windows下默认编码方式时GB2312.因此,在Windows和Linux进行通信的时候,如果没有进行转码则会出现乱码问题.因此,需要进行UTF-8和GB ...
- 最简单的一致性Hash算法实现
import java.util.Collection;import java.util.SortedMap;import java.util.TreeMap; public class Consis ...
- 5 Python+Selenium的元素定位方法(xpath)
[环境] Python3.6+selenium3.0.2+FireFox50+win7 [定位方法] 1.方法:find_element_by_xpath('') 说明:xpath定位方法有相对路径和 ...
- jQuery访问json文件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 网页小技巧-360doc个人图书馆复制文字
用过这个网站的人知道,当你像平时一样复制网页的地址时,这个网站会弹出如下的提示框: 这时候如果你没有账号,又不想注册.真的是一种很崩溃的感觉,但是除了注册登录外,就没有其他的办法了吗? 熟悉网页调试的 ...