当前位置: 首页 > news >正文

web网站发布/seo长尾关键词排名

web网站发布,seo长尾关键词排名,免费网站怎么做排名,网站以下内容未做缓存文章目录注册功能实现表设计和环境配置开发编写数据库表认证实现引言:Shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安…

在这里插入图片描述

文章目录

  • 注册功能实现
    • 表设计和环境配置
    • 开发编写
  • 数据库表认证实现

引言:Shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架

注册功能实现

表设计和环境配置

引入依赖

		<!--mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.3</version></dependency><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--druid--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.19</version></dependency>

配置application.properties

server.port=8089
# 设置名字
spring.application.name=shiro
# 指定项目访问路径名
server.servlet.context-path=/shiro
# 把视图换成jsp
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp# 配置数据源相关参数
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/shiro?characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root# 配置mybatiss
mybatis.type-aliases-package=com.ryoujou.entity
# 对应静态资源目录
mybatis.mapper-locations=classpath:com/ryoujou/mapper/*.xml

设计表数据
在这里插入图片描述

在这里插入图片描述

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (`id` int(6) NOT NULL AUTO_INCREMENT,`username` varchar(40) DEFAULT NULL,`password` varchar(40) DEFAULT NULL,`salt` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;SET FOREIGN_KEY_CHECKS = 1;

开发编写

  • 1.创建实体类entity
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User {private String id;private String username;private String password;private String salt;
}
  • 2.创建DAO接口和UserDAOMapper
@Mapper
public interface UserDAO {void save(User user);
}
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ryoujou.dao.UserDAO"><insert id="save" parameterType="User" useGeneratedKeys="true" keyProperty="id">insert into t_user values(#{id},#{username},#{password},#{salt})</insert>
</mapper>
  • 3.开发service接口和实现类
public interface UserService {//注册用户方法void register(User user);
}
@Service
@Transactional
public class UserServiceImpl implements UserService {@Resourceprivate UserDAO userDAO;@Overridepublic void register(User user) {//处理业务调用dao//明文密码进行md5处理+salt+hash//1.生成随机盐String salt = SaltUtils.getSalt(8);//2.随机盐保存到数据user.setSalt(salt);//3.根据明文密码进行md5+salt+hashMd5Hash md5Hash = new Md5Hash(user.getPassword(),salt,1024);//将生成的密文赋值给useruser.setPassword(md5Hash.toHex());//4.调用UserDAO保存user对象userDAO.save(user);}
}
  • 4.开发slat工具类
public class SaltUtils {/** 生成salt的静态方法* */public static String getSalt(int n){char[] chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()".toCharArray();StringBuilder sb = new StringBuilder();for (int i = 0; i < n; i++) {char aChar = chars[new Random().nextInt(chars.length)];sb.append(aChar);}return sb.toString();}/**测试main函数* */public static void main(String[] args) {String salt = getSalt(4);System.out.println(salt);}
}

5.开发Controller

@Controller
@RequestMapping("user")
public class UserController {@Autowiredprivate UserService userService;/** 用户认证** */@RequestMapping("register")public String register(User user){try {userService.register(user);//成功就返回登录页面return "redirect:/login.jsp";} catch (Exception e) {e.printStackTrace();//失败返回注册页面return "redirect:/register.jsp";}}/** 用户登录* 用来处理身份认证* 接受String类型的username和password* */@RequestMapping("login")public  String login(String username,String password){//获取主体对象//在DefaultSecurityWebManager中,会自动注入全局安全管理工具Subject subject = SecurityUtils.getSubject();//登录时,把获取到的主体对象信息封装成tokentry {//登录,成功后跳转到index.jsp页面资源subject.login(new UsernamePasswordToken(username,password));return "redirect:/index.jsp";} catch (UnknownAccountException e) {e.printStackTrace();System.out.println("用户名不存在");}catch (IncorrectCredentialsException e) {e.printStackTrace();System.out.println("密码错误");}//登录失败回到login.jsp页面资源return "redirect:/login.jsp";}/** 退出登录** */@RequestMapping("logout")public String logout(){Subject subject = SecurityUtils.getSubject();subject.logout();return "redirect:/login.jsp";}
}
  • 启动访问进行注册

http://localhost:8089/shiro/register.jsp

  • 在数据库可以查询到数据

在这里插入图片描述


数据库表认证实现

  • 0.开发DAO
@Mapper
public interface UserDAO {//注册保存用户void save(User user);// 登录验证数据库用户User findByUserName(String username);
}

  • 1.开发mapper配置文件
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ryoujou.dao.UserDAO"><insert id="save" parameterType="User" useGeneratedKeys="true" keyProperty="id">insert into t_user values(#{id},#{username},#{password},#{salt})</insert><select id="findByUserName" parameterType="String" resultType="User">select id,username,password,salt from t_userwhere username = #{username}</select>
</mapper>

  • 2.开发Service接口
public interface UserService {//注册用户方法void register(User user);//根据用户名查询业务的方法User findByUserName(String username);
}

  • 3.开发Service实现类
@Service("userServiceImpl")
@Transactional
public class UserServiceImpl implements UserService {@Autowiredprivate UserDAO userDAO;@Overridepublic User findByUserName(String username) {return userDAO.findByUserName(username);}@Overridepublic void register(User user) {//处理业务调用dao//1.生成随机盐String salt = SaltUtils.getSalt(8);//2.将随机盐保存到数据user.setSalt(salt);//3.明文密码进行md5 + salt + hash散列Md5Hash md5Hash = new Md5Hash(user.getPassword(),salt,1024);user.setPassword(md5Hash.toHex());userDAO.save(user);}
}
public interface UserService {//注册用户方法void register(User user);// 登录验证数据库用户User findByUserName(String username);
}

  • 4.开发在工厂中获取bean对象的工具类
@Component
public class ApplicationContextUtils implements ApplicationContextAware {private static ApplicationContext context;/** 回传创建好的工厂* */@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.context = applicationContext;}//根据bean的名字获取工厂中指定的bean对象public static Object getBean(String beanName){return context.getBean(beanName);}
}

  • 5.修改自定义realm
public class CustomerRealm extends AuthorizingRealm {//授权@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {return null;}//认证@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {//伪代码数据//获取到前台传输的tokenString principal = (String) token.getPrincipal();//在工厂工具类ApplicationContextUtils中获取service对象,默认策略是首字母小写,获取我们的userServiceImpl对象UserService userService = (UserService) ApplicationContextUtils.getBean("userServiceImpl");//调用UserServiceUser user = userService.findByUserName(principal);
//      旧版伪代码
//        if ("xiaozhang".equals(principal)){
//            //成功返回创建的对象信息
//            return new SimpleAuthenticationInfo(principal,"123",this.getName());
//        }//判断//第一个参数用户名//第二个参数密码//第三个参数随机盐//第四个参数是Realm的名字if (!ObjectUtils.isEmpty(user)){return new SimpleAuthenticationInfo(user.getUsername(),user.getPassword(), ByteSource.Util.bytes(user.getSalt()),this.getName());}return null;}
}

  • 6.修改ShiroConfig中realm使用凭证匹配器以及hash散列

在这里插入图片描述

@Configuration
public class ShiroConfig {/** 1.创建shirofilter,使用工厂构建,* 定义一个shirofilter获取方法,负债拦截所有请求* DefaultWebSecurityManager defaultWebSecurityManager* 传入,因为shirofilter依赖于DefaultWebSecurityManager进行构建* */@Beanpublic ShiroFilterFactoryBean getShiroFilterFactoryBean(DefaultWebSecurityManager defaultWebSecurityManager){ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();//注入安全管理器DefaultWebSecurityManagershiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager);//配置系统公共资源Map<String,String> map = new HashMap<String,String>();map.put("/user/login","anon");//anon 设置为公共资源  放行资源放在下面map.put("/user/register","anon");//anon 设置为公共资源  放行资源放在下面map.put("/register.jsp","anon");//anon 设置为公共资源  放行资源放在下面map.put("/user/getImage","anon");map.put("/**","authc");//authc 请求这个资源需要认证和授权//默认认证界面路径shiroFilterFactoryBean.setLoginUrl("/login.jsp");shiroFilterFactoryBean.setFilterChainDefinitionMap(map);//返回一个shiroFilterFactoryBeanreturn  shiroFilterFactoryBean;}/** 2.创建SecurityManager,这里是DefaultWebSecurityManager** */@Beanpublic DefaultWebSecurityManager getDefaultWebSecurityManager(Realm realm){DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();//给安全管理器设置RealmdefaultWebSecurityManager.setRealm(realm);return defaultWebSecurityManager;}/** 3.创建realm自定义的数据域* */@Beanpublic Realm getRealm(){CustomerRealm customerRealm = new CustomerRealm();//修改凭证校验匹配器HashedCredentialsMatcher credentialsMatcher = new HashedCredentialsMatcher();//设置加密算法credentialsMatcher.setHashAlgorithmName("md5");//设置散列次数credentialsMatcher.setHashIterations(1024);customerRealm.setCredentialsMatcher(credentialsMatcher);return customerRealm;}
}
  • 启动项目->访问公共资源完成注册->完成登录认证进入授权资源
    http://localhost:8089/shiro/register.jsp
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

—end

http://www.jmfq.cn/news/5255821.html

相关文章:

  • 怎么做棋牌网站/如何在百度推广网站
  • 怎样卸载电脑上的wordpress/企业网站seo方案案例
  • 上林县建设局网站/千峰培训出来好就业吗
  • 网上创业及网站建设实训总结/太原网站推广公司
  • 做网站用软件/市场调研报告范文2000
  • 海外网站域名/北京网站制作公司
  • 网站 语言选择/免费自己建网页
  • 丰都网站建设联系电话/长春网站搭建
  • 怎么做室内设计公司网站/杭州seo公司哪家好
  • 网站开发项目/今日中央新闻
  • 沈阳企业网站/成都网络优化公司有哪些
  • 简洁公司网站源码/福建seo排名培训
  • 做公司网站要注意哪些问题/业务推广网站
  • 传奇网站模板免费下载/免费网上销售平台
  • 沈阳城市建设学院官网网站/企业培训系统
  • 武汉建设网站建站/seo优化排名易下拉软件
  • php wordpress乱码/seo优化及推广如何运营
  • 购物网站图片的放大怎么做的/如何推广公司网站
  • 如何做谷歌网站优化/网店如何营销推广
  • 建设部网站城乡规划资质标准/十大最靠谱培训机构
  • 做国外单的网站叫什么/怎么做网站链接
  • 自己怎么制作小程序商城/seo网站优化报价
  • 网页生成器手机版/宁波seo外包费用
  • 网站建设需要什么设备/万网域名
  • 做购物网站/深圳外贸seo
  • 搭建网站什么意思/百度竞价排名规则
  • 益阳有专做网站的吗/自制网页
  • 禅城区做网站策划/品牌如何推广
  • 手机网站格局/新开网站
  • 如何做电影下载网站/宁波网络推广方式