From 14bdaf59892064284a7e469fbe97a80e837c09c4 Mon Sep 17 00:00:00 2001 From: "fjy8018@qq.com" <27894869fjy> Date: Fri, 6 Jul 2018 15:14:36 +0800 Subject: [PATCH] =?UTF-8?q?shiro=E7=99=BB=E5=BD=95=E3=80=81=E6=8B=A6?= =?UTF-8?q?=E6=88=AA=E6=B5=8B=E8=AF=95=E6=88=90=E5=8A=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql.sql | 8 +++- .../top/fjy8018/shiro/ShiroApplication.java | 2 +- .../shiro/constant/GlobalConstant.java | 8 ++++ .../shiro/controller/LoginController.java | 43 +++++++++++++++++++ .../shiro/controller/NavController.java | 18 ++++++++ .../top/fjy8018/shiro/dataobject/Role.java | 2 +- .../top/fjy8018/shiro/dataobject/User.java | 2 + .../top/fjy8018/shiro/form/LoginForm.java | 16 +++++++ src/main/resources/application.yml | 11 +++-- src/main/resources/mapper/UserMapper.xml | 12 ++++-- src/main/webapp/pages/index.jsp | 16 +++++++ src/main/webapp/pages/login.jsp | 21 +++++++++ 12 files changed, 150 insertions(+), 9 deletions(-) create mode 100644 src/main/java/top/fjy8018/shiro/constant/GlobalConstant.java create mode 100644 src/main/java/top/fjy8018/shiro/controller/LoginController.java create mode 100644 src/main/java/top/fjy8018/shiro/controller/NavController.java create mode 100644 src/main/java/top/fjy8018/shiro/form/LoginForm.java create mode 100644 src/main/webapp/pages/index.jsp create mode 100644 src/main/webapp/pages/login.jsp diff --git a/sql.sql b/sql.sql index 11243da..76156f9 100644 --- a/sql.sql +++ b/sql.sql @@ -68,4 +68,10 @@ INSERT INTO permission_role (rid, pid) VALUE ('3','4'); INSERT INTO user_role (rid, uid) VALUE ('1','1'); INSERT INTO user_role (rid, uid) VALUE ('2','2'); - +SELECT u.*,r.*,p.* + FROM user u + INNER JOIN user_role ur ON ur.uid = u.uid + INNER JOIN role r ON ur.uid = r.rid + INNER JOIN permission_role pr ON r.rid = pr.rid + INNER JOIN permission p ON pr.pid = p.pid + WHERE u.username diff --git a/src/main/java/top/fjy8018/shiro/ShiroApplication.java b/src/main/java/top/fjy8018/shiro/ShiroApplication.java index 2237a47..9cad50e 100644 --- a/src/main/java/top/fjy8018/shiro/ShiroApplication.java +++ b/src/main/java/top/fjy8018/shiro/ShiroApplication.java @@ -7,7 +7,7 @@ import org.springframework.context.annotation.ComponentScan; @SpringBootApplication @ComponentScan -@MapperScan(basePackages = {"top.fjy8018.shiro.mapper.UserMapper"}) +@MapperScan(basePackages = {"top.fjy8018.shiro.mapper"}) public class ShiroApplication { public static void main(String[] args) { diff --git a/src/main/java/top/fjy8018/shiro/constant/GlobalConstant.java b/src/main/java/top/fjy8018/shiro/constant/GlobalConstant.java new file mode 100644 index 0000000..ec26f62 --- /dev/null +++ b/src/main/java/top/fjy8018/shiro/constant/GlobalConstant.java @@ -0,0 +1,8 @@ +package top.fjy8018.shiro.constant; + +/** + * 存储全局变量 + */ +public class GlobalConstant { + public static final String USER_SESSION_KEY = "USER_SESSION"; +} diff --git a/src/main/java/top/fjy8018/shiro/controller/LoginController.java b/src/main/java/top/fjy8018/shiro/controller/LoginController.java new file mode 100644 index 0000000..5f1271c --- /dev/null +++ b/src/main/java/top/fjy8018/shiro/controller/LoginController.java @@ -0,0 +1,43 @@ +package top.fjy8018.shiro.controller; + +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.UsernamePasswordToken; +import org.apache.shiro.subject.Subject; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import top.fjy8018.shiro.constant.GlobalConstant; +import top.fjy8018.shiro.dataobject.User; +import top.fjy8018.shiro.form.LoginForm; + +import javax.servlet.http.HttpSession; + +/** + * @author F嘉阳 + * @date 2018/7/6 10:59 + */ +@Controller +public class LoginController { + + @RequestMapping("/login") + public String login(){ + return "login"; + } + + @RequestMapping("/doLogin") + public String doLogin(LoginForm form, HttpSession session){ + UsernamePasswordToken token = new UsernamePasswordToken(form.getUsername(),form.getPassword()); + Subject subject = SecurityUtils.getSubject(); + try{ + subject.login(token); + // 若未发生异常则此处获得用户 + User user = (User) subject.getPrincipal(); + // 将用户写入session + session.setAttribute(GlobalConstant.USER_SESSION_KEY,user); + + return "index"; + }catch (Exception e){ + e.printStackTrace(); + return "login"; + } + } +} diff --git a/src/main/java/top/fjy8018/shiro/controller/NavController.java b/src/main/java/top/fjy8018/shiro/controller/NavController.java new file mode 100644 index 0000000..f8d260e --- /dev/null +++ b/src/main/java/top/fjy8018/shiro/controller/NavController.java @@ -0,0 +1,18 @@ +package top.fjy8018.shiro.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +/** + * 页面导航 + * @author F嘉阳 + * @date 2018/7/6 10:57 + */ +@Controller +public class NavController { + + @RequestMapping("/index") + public String index(){ + return "index"; + } +} diff --git a/src/main/java/top/fjy8018/shiro/dataobject/Role.java b/src/main/java/top/fjy8018/shiro/dataobject/Role.java index 212c700..f825a92 100644 --- a/src/main/java/top/fjy8018/shiro/dataobject/Role.java +++ b/src/main/java/top/fjy8018/shiro/dataobject/Role.java @@ -10,7 +10,7 @@ public class Role { private Integer rid; - private String name; + private String rname; private Set permissions = new HashSet<>(); diff --git a/src/main/java/top/fjy8018/shiro/dataobject/User.java b/src/main/java/top/fjy8018/shiro/dataobject/User.java index 6b41415..5be29a2 100644 --- a/src/main/java/top/fjy8018/shiro/dataobject/User.java +++ b/src/main/java/top/fjy8018/shiro/dataobject/User.java @@ -10,6 +10,8 @@ public class User { private Integer uid; + private String username; + private String password; private Set roles = new HashSet<>(); diff --git a/src/main/java/top/fjy8018/shiro/form/LoginForm.java b/src/main/java/top/fjy8018/shiro/form/LoginForm.java new file mode 100644 index 0000000..f0b7dab --- /dev/null +++ b/src/main/java/top/fjy8018/shiro/form/LoginForm.java @@ -0,0 +1,16 @@ +package top.fjy8018.shiro.form; + +import lombok.Data; + +/** + * 登录表单 + * @author F嘉阳 + * @date 2018/7/6 10:59 + */ +@Data +public class LoginForm { + + private String username; + + private String password; +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 79ff73a..9f22596 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -2,10 +2,15 @@ spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver - url: jdbc:mysql://localhost:3306/db_imis2?useUnicode=true&characterEncoding=utf-8&useSSL=true + url: jdbc:mysql://localhost:3306/db_shiroTest?useUnicode=true&characterEncoding=utf-8&useSSL=true username: trs password: shiro + mvc: + ## 配置jsp页面位置 ## + view: + prefix: /pages/ + suffix: .jsp ## 配置mybatis ## mybatis: - mapper-locations: mappers/*.xml - type-aliases-package: top.fjy8018.shiro.dataobject + mapper-locations: mapper/*.xml + type-aliases-package: top.fjy8018.shiro.dataobject \ No newline at end of file diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml index e3ea228..de3bd41 100644 --- a/src/main/resources/mapper/UserMapper.xml +++ b/src/main/resources/mapper/UserMapper.xml @@ -9,15 +9,21 @@ - + - - + SELECT u.*,r.*,p.* + FROM user u + INNER JOIN user_role ur ON ur.uid = u.uid + INNER JOIN role r ON ur.uid = r.rid + INNER JOIN permission_role pr ON r.rid = pr.rid + INNER JOIN permission p ON pr.pid = p.pid + WHERE u.username = #{username} \ No newline at end of file diff --git a/src/main/webapp/pages/index.jsp b/src/main/webapp/pages/index.jsp new file mode 100644 index 0000000..7ec9472 --- /dev/null +++ b/src/main/webapp/pages/index.jsp @@ -0,0 +1,16 @@ +<%-- + Created by IntelliJ IDEA. + User: F嘉阳 + Date: 2018/7/6 + Time: 11:17 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + home + + +

欢迎登录, ${USER_SESSION.username}

+ + diff --git a/src/main/webapp/pages/login.jsp b/src/main/webapp/pages/login.jsp new file mode 100644 index 0000000..ce87db1 --- /dev/null +++ b/src/main/webapp/pages/login.jsp @@ -0,0 +1,21 @@ +<%-- + Created by IntelliJ IDEA. + User: F嘉阳 + Date: 2018/7/6 + Time: 11:13 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + login + + +

shiro登录测试

+
+
+
+ +
+ +