zoukankan      html  css  js  c++  java
  • 2021-6-3 日报博客

    个人博客

    1.学到的东西

    07-SpringMVC拦截器-用户登录权限控制代码实现1(应用)

    判断用户是否登录 本质:判断session中有没有user,如果没有登陆则先去登陆,如果已经登陆则直接放行访问目标资源

    先编写拦截器如下:

    public class PrivilegeInterceptor implements HandlerInterceptor {
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
            //逻辑:判断用户是否登录  本质:判断session中有没有user
            HttpSession session = request.getSession();
            User user = (User) session.getAttribute("user");
            if(user==null){
                //没有登录
                response.sendRedirect(request.getContextPath()+"/login.jsp");
                return false;
            }
            //放行  访问目标资源
            return true;
        }
    }
    
    

    然后配置该拦截器:找到项目案例的spring-mvc.xml,添加如下配置:

    <!--配置权限拦截器-->
        <mvc:interceptors>
            <mvc:interceptor>
                <!--配置对哪些资源执行拦截操作-->
                <mvc:mapping path="/**"/>
                <bean class="com.itheima.interceptor.PrivilegeInterceptor"/>
            </mvc:interceptor>
        </mvc:interceptors>
    
    

    08-SpringMVC拦截器-用户登录权限控制代码实现2(应用)

    在登陆页面输入用户名密码,点击登陆,通过用户名密码进行查询,如果登陆成功,则将用户信息实体存入session,然后跳转到首页,如果登陆失败则继续回到登陆页面

    在UserController中编写登陆逻辑

    @RequestMapping("/login")
        public String login(String username,String password,HttpSession session){
            User user = userService.login(username,password);
            if(user!=null){
                //登录成功  将user存储到session
                session.setAttribute("user",user);
                return "redirect:/index.jsp";
            }
            return "redirect:/login.jsp";
        }
    
    

    service层代码如下:

    //service层
    public User login(String username, String password) {
                User user = userDao.findByUsernameAndPassword(username,password);
                return user;
    }
    
    

    dao层代码如下:

    //dao层
     public User findByUsernameAndPassword(String username, String password) throws EmptyResultDataAccessException{
            User user = jdbcTemplate.queryForObject("select * from sys_user where username=? and password=?", new BeanPropertyRowMapper<User>(User.class), username, password);
            return user;
        }
    
    

    此时仍然登陆不上,因为我们需要将登陆请求url让拦截器放行,添加资源排除的配置

    <!--配置权限拦截器-->
        <mvc:interceptors>
            <mvc:interceptor>
                <!--配置对哪些资源执行拦截操作-->
                <mvc:mapping path="/**"/>
                <!--配置哪些资源排除拦截操作-->
                <mvc:exclude-mapping path="/user/login"/>
                <bean class="com.itheima.interceptor.PrivilegeInterceptor"/>
            </mvc:interceptor>
        </mvc:interceptors>
    

    09-SpringMVC拦截器-用户登录权限控制代码实现3(应用)

    JdbcTemplate.queryForObject对象如果查询不到数据会抛异常,导致程序无法达到预期效果,如何来解决该问题?

    在业务层处理来自dao层的异常,如果出现异常service层返回null,而不是将异常抛给controller

    因此改造登陆的业务层代码,添加异常的控制

    public User login(String username, String password) {
            try {
                User user = userDao.findByUsernameAndPassword(username,password);
                return user;
            }catch (EmptyResultDataAccessException e){
                return null;
            }
        }
    
    

    2.明日计划

    SpringMVC异常处理机制

    3.遇到的问题

  • 相关阅读:
    各个控件说明
    html常用
    abp.message
    ABP框架——单表实体流程
    AngularJS $http和$.ajax
    AngularJS ng-if使用
    AngularJS 多级下拉框
    AngularJS 计时器
    AngularJS table循环数据
    Python之待学习记录
  • 原文地址:https://www.cnblogs.com/gongyunlong-blogs/p/14915847.html
Copyright © 2011-2022 走看看