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

做门的网站建设手机之家中关村在线

做门的网站建设,手机之家中关村在线,深圳市福田区建设局网站,做网站多少钱西宁君博示范Spring有很多不同的模块。 所有这些对于具体目的都是有用的。 今天#xff0c;我将讨论Spring Security。 该模块提供了灵活的方法来管理访问Web应用程序不同部分的许可。 在这篇文章中#xff0c;我将研究Spring MVC #xff0c; Hibernate #xff0c; MySQL与Spring Sec… Spring有很多不同的模块。 所有这些对于具体目的都是有用的。 今天我将讨论Spring Security。 该模块提供了灵活的方法来管理访问Web应用程序不同部分的许可。 在这篇文章中我将研究Spring MVC Hibernate MySQL与Spring Security的集成。 任何Web应用程序的常规情况都是某些用户组之间的功能分离。 例如具有“主持人”角色的用户可以编辑数据库中的现有记录。 一个用户 具有“管理员”角色的用户可以执行与具有“主持人”角色的用户相同的操作并创建新记录。 在Spring MVC中可以使用Spring Security来实现许可管理。 目标 作为示例我将在Hibernate中使用示例Spring MVC应用程序。 用户及其角色将存储在数据库中。 MySQL将用作数据库。 我将创建三个表用户角色user_roles。 您可能会猜到user_roles表是一个中间表 。 在应用程序中将扮演两个角色主持人和管理员。 将有几个页面可供主持人和管理员访问。 制备 为了使Spring Security在项目中可用只需在pom.xml文件中添加以下依赖项 !-- Spring Security --dependencygroupidorg.springframework.security/groupidartifactidspring-security-core/artifactidversion3.1.3.RELEASE/version/dependencydependencygroupidorg.springframework.security/groupidartifactidspring-security-web/artifactidversion3.1.3.RELEASE/version/dependencydependencygroupidorg.springframework.security/groupidartifactidspring-security-config/artifactidversion3.1.3.RELEASE/version/dependency 我必须在数据库中创建三个表并在其中插入几条记录。 CREATE TABLE roles (id int(6) NOT NULL AUTO_INCREMENT,role varchar(20) NOT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT5 DEFAULT CHARSETutf8;CREATE TABLE users (id int(6) NOT NULL AUTO_INCREMENT,login varchar(20) NOT NULL,password varchar(20) NOT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT5 DEFAULT CHARSETutf8;CREATE TABLE user_roles (user_id int(6) NOT NULL,role_id int(6) NOT NULL,KEY user (user_id),KEY role (role_id) ) ENGINEInnoDB DEFAULT CHARSETutf8; 这是角色和用户的代码 INSERT INTO hibnatedb.roles (role) VALUES (admin), (moderator);INSERT INTO hibnatedb.users (login, password) VALUES (moder, 111111), (adm, 222222);INSERT INTO hibnatedb.user_roles (user_id, role_id) VALUES (1, 2), (2, 1);主要部分 项目的完整结构具有以下结构 由于您可以在GitHub上找到该项目因此我将忽略当前主题之外的一些内容。 我想从每个Web项目的心脏开始我的意思是web.xml文件。 Spring Security基于简单的过滤器因此我需要在部署描述符中添加过滤器的声明 ...filterfilter-namespringSecurityFilterChain/filter-namefilter-classorg.springframework.web.filter.DelegatingFilterProxy/filter-class/filterfilter-mappingfilter-namespringSecurityFilterChain/filter-nameurl-pattern/*/url-pattern/filter-mapping ... 现在是时候为用户和角色表创建实体了 Entity Table(nameusers) public class User {IdGeneratedValueprivate Integer id;private String login;private String password;OneToOne(cascadeCascadeType.ALL)JoinTable(nameuser_roles,joinColumns {JoinColumn(nameuser_id, referencedColumnNameid)},inverseJoinColumns {JoinColumn(namerole_id, referencedColumnNameid)})private Role role;public Integer getId() {return id;}public void setId(Integer id) {this.id id;}public String getLogin() {return login;}public void setLogin(String login) {this.login login;}public String getPassword() {return password;}public void setPassword(String password) {this.password password;}public Role getRole() {return role;}public void setRole(Role role) {this.role role;} } 和 Entity Table(nameroles) public class Role {IdGeneratedValueprivate Integer id;private String role;OneToMany(cascadeCascadeType.ALL)JoinTable(nameuser_roles, joinColumns {JoinColumn(namerole_id, referencedColumnNameid)},inverseJoinColumns {JoinColumn(nameuser_id, referencedColumnNameid)})private Set userRoles;public Integer getId() {return id;}public void setId(Integer id) {this.id id;}public String getRole() {return role;}public void setRole(String role) {this.role role;}public Set getUserRoles() {return userRoles;}public void setUserRoles(Set userRoles) {this.userRoles userRoles;}} 每个实体类都需要DAO和Service层。 public interface UserDAO {public User getUser(String login);} 和 Repository public class UserDAOImpl implements UserDAO {Autowiredprivate SessionFactory sessionFactory;private Session openSession() {return sessionFactory.getCurrentSession();}public User getUser(String login) {List userList new ArrayList();Query query openSession().createQuery(from User u where u.login :login);query.setParameter(login, login);userList query.list();if (userList.size() 0)return userList.get(0);elsereturn null; }} 分别用于Role类 public interface RoleDAO {public Role getRole(int id);} 和 Repository public class RoleDAOImpl implements RoleDAO {Autowiredprivate SessionFactory sessionFactory;private Session getCurrentSession() {return sessionFactory.getCurrentSession();}public Role getRole(int id) {Role role (Role) getCurrentSession().load(Role.class, id);return role;}} 服务层使用相同的对 public interface UserService {public User getUser(String login);} 和 Service Transactional public class UserServiceImpl implements UserService {Autowiredprivate UserDAO userDAO;public User getUser(String login) {return userDAO.getUser(login);}} 分别用于Role类 public interface RoleService {public Role getRole(int id);} 和 Service Transactional public class RoleServiceImpl implements RoleService {Autowiredprivate RoleDAO roleDAO;public Role getRole(int id) {return roleDAO.getRole(id);}} 以上只是机械的常规代码。 现在让我们研究Spring Security代码。 为了将Spring Security插入到项目中我必须创建CustomUserDetailsS​​ervice类并实现UserDetailsS​​ervice接口。 import java.util.ArrayList; import java.util.Collection; import java.util.List;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;import com.sprsec.dao.UserDAO;Service Transactional(readOnlytrue) public class CustomUserDetailsService implements UserDetailsService {Autowiredprivate UserDAO userDAO; public UserDetails loadUserByUsername(String login)throws UsernameNotFoundException {com.sprsec.model.User domainUser userDAO.getUser(login);boolean enabled true;boolean accountNonExpired true;boolean credentialsNonExpired true;boolean accountNonLocked true;return new User(domainUser.getLogin(), domainUser.getPassword(), enabled, accountNonExpired, credentialsNonExpired, accountNonLocked,getAuthorities(domainUser.getRole().getId()));}public Collection getAuthorities(Integer role) {List authList getGrantedAuthorities(getRoles(role));return authList;}public List getRoles(Integer role) {List roles new ArrayList();if (role.intValue() 1) {roles.add(ROLE_MODERATOR);roles.add(ROLE_ADMIN);} else if (role.intValue() 2) {roles.add(ROLE_MODERATOR);}return roles;}public static List getGrantedAuthorities(List roles) {List authorities new ArrayList();for (String role : roles) {authorities.add(new SimpleGrantedAuthority(role));}return authorities;}} 该类的主要目的是将应用程序的User类映射到Spring Security的User类。 这是Spring Security的杀手级功能之一。 这样您可以使任何种类的Spring MVC应用程序适应Security模块的使用。 控制器和视图 有关Spring Security的最常见问题之一是如何创建自定义登录表单 。 答案很简单。 您需要使用该表单创建一个JSP文件并在其中指定action属性。 URL映射的大部分取决于spring-security.xml文件 ...http auto-configtrueintercept-url pattern/sec/moderation.html accessROLE_MODERATORintercept-url pattern/admin/* accessROLE_ADMINform-login login-page/user-login.html default-target-url/success-login.html authentication-failure-url/error-login.htmllogout logout-success-url/index.html/logout/form-login/intercept-url/intercept-url/httpauthentication-managerauthentication-provider user-service-refcustomUserDetailsServicepassword-encoder hashplaintext/password-encoder/authentication-provider/authentication-manager ... 如您所见我为以下各项指定了URL登录页面成功登录后的默认页面凭据无效情况下的错误页面。 我也声明了需要一些访问许可的URL。 最重要的是身份验证管理器的声明。 通过这种方式Spring Security将使用数据库来识别用户及其角色。 控制器 Controller public class LinkNavigation {RequestMapping(value/, methodRequestMethod.GET)public ModelAndView homePage() {return new ModelAndView(home);}RequestMapping(value/index, methodRequestMethod.GET)public ModelAndView indexPage() {return new ModelAndView(home);}RequestMapping(value/sec/moderation, methodRequestMethod.GET)public ModelAndView moderatorPage() {return new ModelAndView(moderation);}RequestMapping(value/admin/first, methodRequestMethod.GET)public ModelAndView firstAdminPage() {return new ModelAndView(admin-first);}RequestMapping(value/admin/second, methodRequestMethod.GET)public ModelAndView secondAdminPage() {return new ModelAndView(admin-second);}} 和 Controller public class SecurityNavigation {RequestMapping(value/user-login, methodRequestMethod.GET)public ModelAndView loginForm() {return new ModelAndView(login-form);}RequestMapping(value/error-login, methodRequestMethod.GET)public ModelAndView invalidLogin() {ModelAndView modelAndView new ModelAndView(login-form);modelAndView.addObject(error, true);return modelAndView;}RequestMapping(value/success-login, methodRequestMethod.GET)public ModelAndView successLogin() {return new ModelAndView(success-login);}} 您可以在GitHub上看到的视图 。 请注意在WebAppConfig java类中添加ImportResource“ classpathspring-security.xml”。 摘要 我认为本文将帮助您深入了解Spring Security。 我在这里使用了Hibernate和MySQL因为这样的技术组合在Internet上的其他教程中并不经常使用。 可能您注意到我在项目中使用了一些XML这是因为当前尚无办法使用基于注释的方法来实现所有这些东西。 参考资料 Spring MVC来自JCG合作伙伴 Alexey Zvolinskiy来自Fruzenshtein的注释博客的MySQL和Hibernate的安全性 。 翻译自: https://www.javacodegeeks.com/2013/05/spring-mvc-security-with-mysql-and-hibernate.html
http://www.huolong8.cn/news/125587/

相关文章:

  • 易企秀怎么做网站用c 来建设网站
  • 保定企业网站开发一般通过是什么意思
  • 网站建设需要掌握什么知识wordpress上传突然提示需要ftp
  • 响应式网站算几个页面wordpress怎么用地图
  • 支付宝手机网站广州网络营销类岗位
  • 如何做视频播放网站泰安网站开发推广
  • 网站建设及推广的书推进网站集约化建设 网络安全
  • 什么网站可以做翻译兼职专业电商网站建设哪家好
  • 长安大学门户网站是谁给做的科技公司网站制作模板
  • 网站建设初步规划手机网站页面设计尺寸
  • 国外有哪些做deal的网站新乐市住房和城乡建设局网站
  • 国外的网站叫什么电力建设网站
  • 网站设计流程包括做微信平台网站
  • 招商网站建设推广程序员除了做软件是不是就做网站
  • 怎样删除网站官方网站哪家做的最好
  • 免费的网站后台宠物网站素材
  • 网站被安全狗拦截哪个网站做海南二手房
  • 网站工信部实名认证中心wordpress怎样更换主题
  • 配资网站建设多少钱dns服务器 域名不存在时 跳转到指定网站
  • 网站界面ui设计静态网站是什么意思
  • 性价比高的seo网站优化wordpress标签的调用
  • 东莞网站排名优化公司手机app制作网站用什么软件
  • 单网页网站制作公司网站备案查询
  • 海门网站建设整人网站怎么做
  • 平谷微网站建设有什么做衣服的网站好
  • 自己做服务器的网站广州网站制作联系方式
  • 红酒网站建设模板网站优化大赛
  • cms网站内容管理系统电子公章印章在线制作
  • 常州外贸公司网站建设营销型建设网站实训总结
  • 重庆祥云平台做网站seo快速提升排名