智能商贸-实现shiro加密登录信息和角色权限关联

本文详细介绍了在智能商贸系统中如何利用Shiro实现密码加密登录、角色权限关联及登录过期等功能。包括修改密码、登录路径配置、拦截路径设定、AJAX请求处理、数据库中的用户验证、键盘回车登录、角色权限管理和表单布局等关键步骤。此外,还讨论了如何处理重复添加权限、回显操作和角色权限的增删问题。
摘要由CSDN通过智能技术生成

编码规范:常量尽量使用全部大写(快捷键:Ctrl+shift+y,全部大写)

修改密码,将密码修改为和用户名一样。

//设置加密的方法
public class MD5Utils {
//设置盐值
    public static String SALT="itsource";
// 设置加密次数
    public static int hashIterations=10;

//    定义一个方法来生成密码
    public static String createMD5(String password){
    SimpleHash hash = new SimpleHash("MD5",password,SALT,hashIterations);
    return hash.toString();
    }
}

测试

//将用户的密码修改为和用户的名字相同,并进行加密
    @Test
    public void testUpdatePwd() throws Exception{
        List<Employee> list = employeeService.findAll();
        list.forEach(employee -> {
//           通过查询到的所有的用户信息list来拿到用户名
            String username = employee.getUsername();
//将用户的用户名来作为密码进行加密
            employee.setPassword(MD5Utils.createMD5(username));
//          然后保存加密密码到数据库
            employeeService.save(employee);
        });
    }

保存的时候将密码加密

修改不加密,因为修改不会修改密码。
我们也可以在service层修改保存时密码加密的代码:
我们覆写save方法:

//    根据名称查询用户
    @Override
    public Employee findByUsername(String username) {
        return employeeRepository.findByUsername(username);
    }

两个登录的login路径

两个login,第一个login跳转到登录页面,第二个login用于登录功能
可以通过请求方式来区分两个login,第一个login使用get请求

 //有两个登录login路径
//    这个login路径我们将它跳转到登录页面,为它配置GET请求方式
    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public String index() {
            return "/login";
    }
/*使用AJAX请求,这个请求只返回数据,不跳转,因为AJAX请求如果跳转的话,
会出现两种情况,第一种是会将跳转页面当做字段传回来,第二种就是直接报错
* */
    //这个我们用来实现登录功能,配置为POST请求
    @RequestMapping(value = "/login", method = RequestMethod.POST)
    @ResponseBody
//    @RequestMapping("/login")
    public JsonResult login(String username, String password) {
//    public String login(String username, String password) {
        System.out.println("=====名称:"+username+"====密码:"+password);
        //拿到从前台传来的用户信息,subject代表当前用户
        Subject subject = SecurityUtils.getSubject();
//        如果用户还没有登录,那么先通过令牌来使用户登录
        if (!subject.isAuthenticated()) {
            try {
                UsernamePasswordToken token = new UsernamePasswordToken(username, password);
                subject.login(token);
            } catch (UnknownAccountException e) {
                e.printStackTrace();
                //System.out.println("用户名出错了!");
                return new JsonResult(false,"密码或者用户名错误!请核对后再试");
            } catch (IncorrectCredentialsException e) {
                e.printStackTrace();
                return new JsonResult(false,"密码或者用户名错误!请核对后再试");
            } catch (AuthenticationException e) {
                e.printStackTrace();
                return new JsonResult(false,"出现未知错误!请联系管理员!");
            }
        }
        //成功后跳到 main.jsp
        return new JsonResult();
    }

配置拦截路径

测试两个login,登录页面样式消失,被拦截了,放行样式:

//使用集合,将需要放行的路径,需要权限的路径,需要登录访问的路径放进去
    public LinkedHashMap<Object, Object> createFilterChainDefinitionMap(){
        LinkedHashMap<Object, Object> filterChainDefinitionMap = new LinkedHashMap<>();
//        设置不需要访问也可以被放行的路径
        filterChainDefinitionMap.put("/login", "anon");
        filterChainDefinitionMap.put("/login.jsp", "anon&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值