Inversion of Control (IoC) in Spring Frameworks
Key Concepts of Inversion of Control :
- Dependency Injection (DI)
- The most common implementation of IoC.
- Dependencies (objects that a class requires to function) are injected into the class rather than the class creating them itself.
- Can be implemented in three main ways: constructor injection, setter injection, and interface injection.
- Service Locator
- An alternative to dependency injection.
- A central registry (the service locator) provides dependencies upon request.
- Can lead to less transparency in dependency management compared to DI.
- Without IoC.
- With IoC (Dependency Injection).
Benefits of IoC:
Spring (Java): Provides comprehensive support for dependency injection and IoC.
Example in Spring Framework:
Spring Framework is a well-known example of an IoC container. Here’s how dependency injection is typically configured in a Spring application:
XML Configuration:
How to PACKAGE Spring Boot application to JAR and WAR
The default packaging type of a Spring Boot project is jar if the
- CLEAN
- BUILD
- INSTALL
- PACKAGE.................etc.
Simple LDAP sign-on Authentication Using Ldap-a143mkJar
- A143mkLdapConnection(ldapUrl, ldapDnConn, userEmailId, password);
LDAP Authentication with Spring Boots
The client (an LDAP-ready system or application) sends a request to access information stored within an LDAP database. The client provides their LDAP server user credentials (username and password). The LDAP server cross-checks the user’s submitted credentials against the core user identity data stored in its LDAP database. If the provided credentials match the stored core user identity, the client can access the requested information. Incorrect credentials will lead to denied access to the LDAP database.
ldap.enable=true |
Enable
/ disable LDAP support. |
ldap.ldapUrl=ldap://HostIP:389 |
The
URL/IP to your LDAP server, including port |
ldap.ldapSystemDN=cn=Administrator,dc=olattest,dc=org |
System
user: used for getting all users and connection testing |
ldap.ldapSystemPW=mySuperPassword |
The
LDAP password of the system user |
ldap.ldapBases=
ou=person,dc=olattest,dc=org |
List
of bases where to find users. To use multiple bases you must edit the config
file manually |
ldap.sslEnabled
= false |
Enable
SSL connection |
ldap.trustStoreLocation=/usr/lib/j2sdk1.5-sun/jre/lib/security/cacerts |
Location
of the Java trust store |
ldap.trustStorePwd=changeit |
The
Java trust store password |
ldap.trustStoreType=JKS |
The
Java trust store type |
ldap.cacheLDAPPwdAsOLATPwdOnLogin=true |
When
users log in via LDAP, the system can keep a copy of the password as
encrypted hash in the database. This makes OLAT more independent from an
offline LDAP server and users can use their LDAP password to use the WebDAV
functionality. When setting to true (recommended), make sure you
configured password.change.allowed=false |
ldap.convertExistingLocalUsersToLDAPUsers=true |
When
the system detects an LDAP user that does already exist in OLAT but is not
marked as LDAP user, the OLAT user can be converted to an LDAP managed user.
When enabling this feature you should make sure that you don't have a user
'administrator' in your ldapBases (not a problem but not recommended) |
ldap.deleteRemovedLDAPUsersOnSync=false |
Users
that have been created vial LDAP sync but now can't be found on the LDAP
anymore can be deleted automatically. If unsure, set to false and delete
those users manually in the LDAP administration panel. |
ldap.deleteRemovedLDAPUsersPercentage=50 |
Sanity
check when deleteRemovedLDAPUsersOnSync is set to 'true': if more than the
defined percentages of user accounts are not found on the LDAP server and
thus recognized as to be deleted, the LDAP sync will not happen and require a
manual triggering of the delete job from the admin interface. This should prevent
accidential deletion of OLAT user because of temporary LDAP problems or user
relocation on the LDAP side. Value= 0 (never delete) to 100 (always delete). |
ldap.ldapSyncOnStartup=true |
Should
users be created and synchronized automatically on startup? If you set this
and the cron configuration to false, the users will be generated on-the-fly
when they log in the first time. |
ldap.ldapSyncCronSync=true |
Should
users be created and synchronized periodically, not just during startup? If
you set this and the startup configuration to false, the users will be
generated on-the-fly when they log in the first time. |
ldap.ldapSyncCronSyncExpression=0
0 * * * ? |
Set
the rule how often the LDAP synchronization should take place. Default is
every hour. For the cron syntax see quartz cron syntax documentation |
ldap.ldapUserObjectClass=person |
Configuration
for syncing user attributes during login or cron and batch sync. The user
object class to use. |
ldap.ldapUserCreatedTimestampAttribute=createdTimestamp |
The
LDAP attribute that tells the creation date of the LDAP user. In active
Directory this is typically "whenCreated", in OpenLDAP
"createdTimestamp". If not available, use the same as for the last
modified date. |
ldap.ldapUserLastModifiedTimestampAttribute=modifyTimestamp |
The
LDAP attribute that tells the creation date of the LDAP user. In active
Directory this is typically "whenChanged", in OpenLDAP
"modifiedTimestamp" |
ldap.attributename.useridentifyer=uid |
Mapping
of the LDAP user identifyer to an OLAT user. In Active Directory this is
typically "sAMAccountName", in OpenLDAP "uid". |
ldap.attributename.email=mail |
Mapping
of the mandatory OLAT user properties. In this example the LDAP attribute
"mail" will be mapped to the OLAT user property "email" |
ldap.attributename.firstName=givenName |
Mapping
of the mandatory OLAT user properties. In this example the LDAP attribute
"givenName" will be mapped to the OLAT user property
"firstname" |
ldap.attributename.lastName=sn |
Mapping
of the mandatory OLAT user properties. In this example the LDAP attribute
"sn" will be mapped to the OLAT user property "lastName" |
olatprovider.enable=false |
Disable
the normal OLAT login screen. When you
set ldap.cacheLDAPPwdAsOLATPwdOnLogin=true, a fallback to the normal
OLAT login is made in case the LDAP server can not be reached. You can set
this variable also to true to have the OLAT and the LDAP login screen
available |
default.auth.provider=LDAP |
Use
the LDAP login screen as the default login screen. |
- Create Spring Boot Java (Microservices) Project Example
- Project Name: LdapAuthenticationConfigSpringBoots.
- Group:Ldap-Auth-a143mk.
- Artifactid:Ldap-Auth-a143mk.
- Description:Learn-Configure LDAP Authentication.
- Package:LDAPAutha143mk.
- Spring Web
- Spring ldap
- ldapsdk
- ldap security
while creating the project pom.xml file and some maven dependency, main class is automatically created when web add any dependency like.
pom.xml
Configure application.properties
Create ldap-data.ldif :
Directory Server uses LDAP Data Interchange Format is a standard text format for representing LDAP objects and LDAP updates (add, modify, delete, modify DN) in a textual form.
WebSecurityConfig ClassCreate new package, named LDAPAutha143mk.config. In this package, create Configuration class name is WebSecurityConfig.java as below:
Create Controllers
Create new package named LDAPAutha143mk.controller. In this package, create new java class named LoginWelcomeController.java
Digital Steganography With Single Sign-On (SSO) Authentication Project For Students
INTRODUCTION:
Follow Steps by Steps
Encryption and Decryption implement using EncryptDecryptA143mk jar
Create this Main Method, you can use this code in function/methods as per You wish.Important Information: we do this type of development/implement to provide security to the online user in the web application or other user application like online platform, your personal information like password is neither in the database of the online platform nor with anyone else.
How to Implement SMTP (Simple Mail Transfer Protocol: To, Cc and Bcc Mails) Using Java
Output is:
How to upload password Protected Excel Using java
Uploading Excel
Import Jar Name is poi-3.17.jar and call Some class
Java controlling Method is uploadFile:
Output:
How to create password Protected Excel for some Column Label in java
How to password protect some columns of Excel using java and editable some columns inside an excel sheet.
Spring MVC comes with AbstractJExcelView class to export data to Excel file via JExcelAPI library. In this tutorial, it show the use of AbstractJExcelView class in Spring MVC application to export data to Excel file for download
Import Jar Name jxl-2.6.12.jar and spring-webmvc-4.3.7.RELEASE.jar and call Some classes
Social Client Login with OAuth2 Spring Boot Application
Add use Dependency in ApiGetway pom.xml file:
OAuth2 Security with Spring Boot
OAuth2 is a token-based security authentication and authorization framework that breaks security down into four components. These four components are
- A protected resource—This is the resource (in our case, a microservice) you want to protect and ensure that only authenticated users who have the proper authorization can access
- A resource owner—A resource owner defines what applications can call their service, which users are allowed to access the service, and what they can do with the service. Each application registered by the resource owner will be given an application name that identifies the application along with an application secret key. The combination of the application name and the secret key are part of the credentials that are passed when authenticating an OAuth2 token.
- An application—This is the application that’s going to call the service on a behalf of a user. After all, users rarely invoke a service directly. Instead, they rely on an application to do the work for them.
- OAuth2 authentication server—The OAuth2 authentication server is the intermediary between the application and the services being consumed. The OAuth2 server allows the user to authenticate themselves without having to pass their user credentials down to every service the application is going to call on behalf of the user.
- Password
- Client credential
- Authorization code
- Implicit
To set up an OAuth2 authentication server, you need the following Spring Cloud dependencies in the authentication-service/pom.xml file
For Example: You have to Create Project Node Name is: "a143mk-Oauth2-Security" on STS4 Tools.
The first thing to note in this listing is the @EnableAuthorizationServer annotation. This annotation tells Spring Cloud that this service will be used as an OAuth2 service and to add several REST-based endpoints that will be used in the OAuth2 authentication and authorization processes.
Like other pieces of the Spring Security framework, to set up users (and their roles), start by extending the WebSecurityConfigurerAdapter class and mark it with the @Configuration annotation.
As such, you need to provide the OAuth2 server a mechanism to authenticate users and return the user information about the authenticating user. This is done by defining two beans in your Spring WebSecurityConfigurerAdapter implementation: authenticationManagerBean() and userDetailsServiceBean(). These two beans are exposed by using the default authentication authenticationManagerBean() and userDetailsServiceBean() methods from the parent WebSecurityConfigurerAdapter class.
you have to Create ConfigWeb.java class.
Run As-> Spring Boot App for Output:
For step by step development working watch the video and learn yourself.
Functional Interface in Java
An Interface which has only one abstract method (SAM: Single Abstract Method) is called Functional Interface. It is used annotation @FunctionalInterface: An informative annotation type used to indicate that an interface type declaration is intended to be a functional interface as defined by the Java Language Specification. Conceptually, a functional interface has exactly one abstract method. Since default methods have an implementation, they are not abstract. If an interface declares an abstract method overriding one of the public methods of java.lang.Object, that also does not count toward the interface's abstract method count since any implementation of the interface will have an implementation from java.lang.Object or elsewhere.
why use Functional Interface?
Some Other Functional Interfaces
- Consumer Interface
- Predicate Interface
- Marker Interfaces
Predicate Interface : it is a functional interface whose functional method is test(obj), that takes an argument and return boolean value.
The predicate functionl interface can also be implemented using a class.
Marker Interfaces: Marker Interface is an empity interface (no field or argument).
Marker Interface are serializable, cloneable and remote interface. All these interfaces are empity interfae.