网站弹窗特效如何网上赚点零花钱
news/
2025/9/27 14:35:42/
文章来源:
网站弹窗特效,如何网上赚点零花钱,wordpress如何登录界面,正规品牌网站设计品牌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插入到项目中我必须创建CustomUserDetailsService类并实现UserDetailsService接口。 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.mzph.cn/news/919587.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!