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

网站怎么不要钱自己做网页制作设计培训

网站怎么不要钱自己做,网页制作设计培训,德州公司做网站,惠州做网站乐云seoShiro简介#xff1a;特性和架构 Apache Shiro是一个功能强大且易于使用的Java安全#xff08;权限#xff09;框架#xff0c;提供了认证、授权、会话管理、加密、与Web集成、缓存等功能。Shiro不仅可以在JavaSE环境中使用#xff0c;也可以在JavaEE环境中使用。 特性 …Shiro简介特性和架构 Apache Shiro是一个功能强大且易于使用的Java安全权限框架提供了认证、授权、会话管理、加密、与Web集成、缓存等功能。Shiro不仅可以在JavaSE环境中使用也可以在JavaEE环境中使用。 特性 Authentication认证身份认证/登录验证用户是否拥有相应的身份。Authorization授权权限验证验证某个已认证的用户是否拥有某个权限。Session Management会话管理管理用户登录后的会话信息。Cryptography加密保护数据的安全性如密码加密存储到数据库。Web Support非常容易集成到Web环境。Caching缓存用户信息、角色和权限提高效率。Concurrency支持多线程应用的并发验证。Remember Me记住我功能一次登录后下次无需再次登录。 架构 Shiro的架构从外部和内部来看可以分为两个部分 外部架构 Subject代表当前“用户”与应用交互的任何东西都可以是Subject如网络爬虫、机器人等。所有Subject都绑定到SecurityManager。SecurityManager安全管理器所有与安全有关的操作都会与SecurityManager交互且它管理着所有Subject。它是Shiro的核心负责与Shiro的其他组件进行交互。Realm域Shiro从Realm获取安全数据如用户、角色、权限。SecurityManager要验证用户身份需要从Realm获取相应的用户进行比较以确定用户身份是否合法。 内部架构 Authenticator认证器负责主体认证。Authorizer授权器决定主体是否有权限进行相应的操作。SessionManager管理会话的生存周期。SessionDAO数据访问对象用于会话的CRUD操作。CacheManager缓存控制器管理用户、角色、权限等的缓存。Cryptography密码模块提供常见的加密组件用于加密/解密操作。 认证 Token 在Shiro中认证指的是识别和证明操作者是一个合法用户。用户如果想要通过认证需要提供Principal身份和Credentials凭证从而应用能验证用户身份。这些身份和凭证信息在Shiro框架中以Token令牌的概念进行封装。 快速上手 添加依赖 dependency groupIdorg.apache.shiro/groupId artifactIdshiro-spring/artifactId version2.0.1/version /dependency dependency groupIdjavax.servlet/groupId artifactIdjavax.servlet-api/artifactId version4.0.1/version scopeprovided/scope /dependency 配置shiro.ini在resource目录下创建shiro.ini文件配置用户认证数据。 # 对用户信息进行匹配 [users] # 用户账号和密码 admin123456 czkt111111 认证测试 public class ShiroTester { Test public void testShiro() { IniRealm realm new IniRealm(classpath:shiro.ini); DefaultSecurityManager securityManager new DefaultSecurityManager(); securityManager.setRealm(realm); SecurityUtils.setSecurityManager(securityManager); Subject subject SecurityUtils.getSubject(); UsernamePasswordToken token new UsernamePasswordToken(admin, 123456); try { subject.login(token); } catch (Exception e) { System.out.println(认证异常:); e.printStackTrace(); } System.out.println(是否认证成功: subject.isAuthenticated()); System.out.println(身份信息: subject.getPrincipal()); } } 认证流程 调用Subject.login(Token)进行登录其会自动委托给SecurityManager。SecurityManager负责真正的身份验证逻辑它会委托给Authenticator进行身份验证。Authenticator可能会委托给相应的AuthenticationStrategy进行多Realm身份验证。Authenticator会把相应的Token传入Realm从Realm获取身份信息如果没有返回或抛出异常表示身份验证失败。 记住我 vs 认证 “记住我”功能允许用户在一次登录后下次访问时无需再次登录。这与普通的认证流程有所不同因为“记住我”功能通常会在用户的浏览器中存储一个持久化的Cookie用于在用户下次访问时自动进行身份验证。 注销Logout 用户可以通过调用Subject.logout()方法进行注销操作。这会委托给SecurityManager进行实际的注销逻辑处理。 SpringBoot Shiro 认证 1. 基础代码调整 首先你需要在Spring Boot项目中添加Shiro的依赖。这可以通过在pom.xml文件中添加以下依赖来完成 dependency groupIdorg.apache.shiro/groupId artifactIdshiro-spring-boot-starter/artifactId version1.7.1/version !-- 请根据需要选择最新版本 -- /dependency 2. 自定义Realm Realm是Shiro与数据源之间的桥梁用于获取安全数据如用户、角色和权限。你需要创建一个自定义的Realm类并实现AuthorizingRealm接口。 import org.apache.shiro.authc.*; import org.apache.shiro.authz.AuthorizationInfo; import org.apache.shiro.authz.SimpleAuthorizationInfo; import org.apache.shiro.realm.AuthorizingRealm; import org.apache.shiro.subject.PrincipalCollection; import org.springframework.beans.factory.annotation.Autowired; // 假设你有一个UserService用于处理用户相关的业务逻辑 Component public class CustomRealm extends AuthorizingRealm { Autowired private UserService userService; Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { String username (String) principals.getPrimaryPrincipal(); // 从数据库中获取用户的角色和权限信息 SetString roles userService.getRolesByUsername(username); SetString permissions userService.getPermissionsByUsername(username); SimpleAuthorizationInfo authorizationInfo new SimpleAuthorizationInfo(); authorizationInfo.setRoles(roles); authorizationInfo.setStringPermissions(permissions); return authorizationInfo; } Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { UsernamePasswordToken upToken (UsernamePasswordToken) token; String username upToken.getUsername(); // 从数据库中获取用户信息 User user userService.findByUsername(username); if (user null) { throw new UnknownAccountException(用户不存在); } // 将用户信息封装到SimpleAuthenticationInfo中并返回 SimpleAuthenticationInfo authenticationInfo new SimpleAuthenticationInfo( username, user.getPassword(), // 假设密码已经加密存储 ByteSource.Util.bytes(user.getSalt()), // 假设使用了盐值加密 getName() ); return authenticationInfo; } } 3. 配置Shiro相关对象 你需要在Spring Boot的配置类中配置Shiro的相关对象如SecurityManager和ShiroFilterFactoryBean。 import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; import org.apache.shiro.spring.web.ShiroFilterFactoryBean; import org.apache.shiro.spring.web.config.DefaultShiroFilterChainDefinition; import org.apache.shiro.spring.web.config.ShiroFilterChainDefinition; import org.apache.shiro.web.mgt.DefaultWebSecurityManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.servlet.Filter; import java.util.HashMap; import java.util.Map; Configuration public class ShiroConfig { Bean public SecurityManager securityManager(CustomRealm customRealm) { DefaultWebSecurityManager securityManager new DefaultWebSecurityManager(); securityManager.setRealm(customRealm); return securityManager; } Bean public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) { ShiroFilterFactoryBean shiroFilterFactoryBean new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(securityManager); shiroFilterFactoryBean.setLoginUrl(/login); // 登录页面URL shiroFilterFactoryBean.setSuccessUrl(/index); // 登录成功后的跳转页面 shiroFilterFactoryBean.setUnauthorizedUrl(/403); // 未授权页面URL // 定义过滤器链 MapString, String filterChainDefinitionMap new HashMap(); filterChainDefinitionMap.put(/static/**, anon); // 静态资源无需认证 filterChainDefinitionMap.put(/login, anon); // 登录页面无需认证 filterChainDefinitionMap.put(/**, authc); // 其他URL都需要认证 shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap); return shiroFilterFactoryBean; } Bean public FilterRegistrationBeanDelegatingFilterProxy delegatingFilterProxy() { FilterRegistrationBeanDelegatingFilterProxy registrationBean new FilterRegistrationBean(); registrationBean.setFilter(new DelegatingFilterProxy(shiroFilter)); registrationBean.addUrlPatterns(/*); return registrationBean; } Bean public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) { AuthorizationAttributeSourceAdvisor advisor new AuthorizationAttributeSourceAdvisor(); advisor.setSecurityManager(securityManager); return advisor; } } 4. IndexController重写登录方法 你需要创建一个控制器来处理登录请求。 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.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; Controller public class IndexController { GetMapping(/login) public String login() { return login; // 返回登录页面 } PostMapping(/login) public String login(RequestParam(username) String username, RequestParam(password) String password, Model model) { Subject subject SecurityUtils.getSubject(); UsernamePasswordToken token new UsernamePasswordToken(username, password); try { subject.login(token); return redirect:/index; // 登录成功后重定向到首页 } catch (Exception e) { model.addAttribute(error, 用户名或密码错误); return login; // 登录失败返回登录页面 } } GetMapping(/index) public String index() { return index; // 返回首页 } GetMapping(/403) public String accessDenied() { return 403; // 返回未授权页面 } } 5. 测试认证登录 现在你可以启动Spring Boot应用程序并访问/login页面来测试登录功能。输入正确的用户名和密码后你应该会被重定向到/index页面。如果输入错误的用户名或密码你应该会看到登录页面上的错误信息。 确保你的UserService和数据库配置正确以便能够正确地获取和验证用户信息。此外你还需要配置一个视图解析器如Thymeleaf或JSP来渲染登录页面、首页和未授权页面。
http://www.hkea.cn/news/14577542/

相关文章:

  • 做网站到八方资源网怎么样仿淘宝php c2c电子商务网站模板
  • 网站管理助手3.0电商seo搜索优化
  • 网站建设栏目标语口号成都网站建设爱特通
  • 企业网站程序带wap如何获取新注册公司电话
  • 网站设计网站建设公司云服务器多少钱一台
  • 线上推广的方式seo怎么优化效果更好
  • 网站设计开发软件网页美化工具网页设计免费模板中文
  • 网站在哪里购买网站建设 英语翻译
  • 株洲市区网站建设公司icp备案网站名称
  • 为什么做电商网站深圳福田保税区
  • 大馆陶网站好的制造公司站制作
  • 驻马店公司做网站91永久海外地域网名
  • 新余专业的企业网站建设公司wordpress投稿送积分
  • 网站建设捌金手指下拉十六响应式网站技术
  • 建设什么网站挣钱wordpress 博客系统
  • 网站建设如何导入音乐网站建设的一般步骤包含哪些
  • 黑户可做网站做帖子网站
  • 网站后端用什么语言中午网站做google广告好吗
  • 校园网站psd未备案网站 赚钱
  • 国际网站建设工具网页qq登录电脑版
  • 建设企业管理类网站网站干什么的
  • 做酒店网站多少钱如何组建网站
  • 女同性怎么做的视频网站网站设计的公司北京
  • 建站行业导航网站公司建网站带商城可以吗
  • 网站模板 源码之家网站开发与维护是什么
  • 网站建设 中企高程wordpress怎么加友链
  • 合肥教育平台网站建设怎样推广app
  • 江门网站建设定制如何做好销售
  • 钢材做那个网站好wordpress商业站
  • 济南网络建站网站搭建官网