Spring security offers a simple configuration based security for your web applications helping you secure your web application with out littering your business logic with any security code. It provides securing URL's based on the Role (Authorities), securing your business methods based on the ACL's.
The first step in hooking up the spring security to your web application is by specifying the DelegatingFilterProxy in your web.xml.
- <!--Spring security filter-->
- <filter>
- <filter-name>springSecurityFilterChain</filter-name>
- <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
- </filter
- <filter-mapping>
- <filter-name>springSecurityFilterChain</filter-name>
- <url-pattern>/*</url-pattern>
- <dispatcher>REQUEST</dispatcher>
- <dispatcher>INCLUDE</dispatcher>
- <dispatcher>FORWARD</dispatcher>
- </filter-mapping>
- <!--End spring security filter-->
If you want to externalize all of your security related configuration into a separate file, you can do so and add that to your context location param.
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>
- /WEB-INF/beans.xml , /WEB-INF/springSecurity.xml </param-value>
- </context-param>
Now comes the part of security configuration for your application, Adding the URL security patterns is pretty simple and straight forward. Add all the URL patterns which you want to secure and add the wild card pattern at the end. You need to have some default principal and role even for non logged in users as you need to give access to pages like log in, register and forgot password kind of functionality even to non logged in users.
I tried to add comments to pretty much every element which I am using here.
As an example I added just a wild card intercept url which make every page of my application secure. You need to exclude different urls based on the roles.
- <security:http entry-point-ref="myAuthenticationEntryPoint" session-fixation-protection="newSession" >
- <!--add any of your cusotom url patterns to protect-->
- <security:intercept-url pattern="/login/**" access="ROLE_ANONYMOUS"/>
- <security:intercept-url pattern="/register/**" access="ROLE_ANONYMOUS"/>
- <security:intercept-url pattern="/**" access="ROLE_USER"/>
- <security:logout logout-success-url="/home.htm"/>
- <security:anonymous username="guest" granted-authority="ROLE_ANONYMOUS"/>
- </security:http>
- <!--name of my authenticationManager is authenticationManager-->
- <security:authentication-manager alias="authenticationManager"/>
- <!--Cutom login filter which replaces the default AUTHENTICATION_PROCESSING_FILTER -->
- <bean id="customizedFormLoginFilter" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilter" >
- <security:custom-filter position="AUTHENTICATION_PROCESSING_FILTER"/><!--replace the default one-->
- <property name="defaultTargetUrl" value="/main.htm"/><!--After a successful login, the user will be taken to this page-->
- <property name="authenticationFailureUrl" value="/home.htm?error=true" /><!--Authentication failed? take him to error page-->
- <property name="authenticationManager" ref="myAuthenticationManager"/> <!--Here it is the custom authenticationManager, login magic goes here -->
- <property name="allowSessionCreation" value="true" /> <!--Allow the application to create sessions-->
- </bean>
- <!--My custom auth manager-->
- <bean id="myAuthenticationManager" class="com.teja.security.CustomAuthunticationManager" />
- <!-- Automatically receives AuthenticationEvent messages -->
- <bean id="loggerListener" class="org.springframework.security.event.authentication.LoggerListener"/>
- <!--My authuntication entry point, can be replaced easily if we are doing custom commence of invalid auths.-->
- <bean id="myAuthenticationEntryPoint"
- class="com.teja.security.CustomAuthenticationEntryPoint" >
- <property name="loginFormUrl" value="/home.htm"/>
- </bean>
Following is my custom implementation of AuthenticationEntryPoint, which currently is not doing any thing except leveraging the commence to its super class which is the spring implementation of AuthenticationProcessingFilterEntryPoint. I hooked it to add any custom logic.
- public class CustomAuthenticationEntryPoint extends AuthenticationProcessingFilterEntryPoint {
- private static final Log logger = LogFactory.getLog(CustomAuthenticationEntryPoint.class);
- @Override
- public void commence(ServletRequest request, ServletResponse response, AuthenticationException authException) throws IOException, ServletException {
- super.commence(request, response, authException);
- }
- }
This is my custom authentication manager which actually does the custom login of the user. It will throw an BadCredentialsException in case of invalid credentials or thorws a AuthenticationServiceException in case of a service error (Database error, SQL error or any other error).
- public class CustomAuthunticationManager implements AuthenticationManager {
- @Autowired
- UserManagerService userManagerService;
- throw new BadCredentialsException("Invalid username/password");
- }
- User user = null;
- GrantedAuthority[] grantedAuthorities = null;
- try{
- }
- catch(InvalidCredentialsException ex){
- throw new BadCredentialsException(ex.getMessage());
- }
- throw new AuthenticationServiceException("Currently we are unable to process your request. Kindly try again later.");
- }
- if (user != null) {
- List<Role> roles = user.getAssociatedRoles();
- grantedAuthorities = new GrantedAuthority[roles.size()];
- for (int i = 0; i < roles.size(); i++) {
- Role role = roles.get(i);
- GrantedAuthority authority = new GrantedAuthorityImpl(role.getRoleCode());
- grantedAuthorities[i] = authority;
- }
- }
- else{
- throw new BadCredentialsException("Invalid username/password");
- }
- return new UsernamePasswordAuthenticationToken(user, authentication.getCredentials(), grantedAuthorities);
- }
- }
At the client side (jsp), the simple configuration you need to do is post the request to"/j_spring_security_check" with parameters "j_username" and "j_password".
That's pretty much all you need to do for enabling spring security to your existing web application. I will try to explain about doing the method security using ACL's and configuring the view using spring security tags in another post.
91 comments:
Nice. Very helpful. Thanks for posting this!
Thanks for a great example of a custom authentication manager!
It's really helpful but I have an understanding problem. If I try to setup a solution like yours I will get the error that no authentication-provider is defined in my xml-file. Did you leave the part out? Because that would be interesting for me.
Nothing was missed. If you can give me the exact error you are facing, I will try to help you solve the problem
Hello Teja,
Thanks for good article.
I'm trying to implement authentication without form login. I tried to implement my own EntryPoint, AuthenticationProvider, etc., but it is not working. Have You ever tried to implement something similar? Will be very grateful for any useful links or examples. Thanks once more.
Teja,
I am getting error for UserManagerService and Role can you tell me the class implementation or it is a spring security class
UserManagerService is a custom service which will fetch the user and roles by username and password. Role is my cusom object which finally endedup being a GrantedAutority which is a spring impl.
http://static.springframework.org/spring-security/site/apidocs/org/springframework/security/ui/AbstractProcessingFilter.html is also helpful in understanding the http security.
hello teja,
i try to implement my own custom authentication Manager based on your example code, but faceing this problem:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name '_authenticationManager': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: No authentication providers were found in the application context
??? i have listed the authentication Manager the way you shown. Or is it a namespace problem and my bean-tag is not recognized by the security app? thanks for your help and time...
hi teja,
i am getting springcontextholder object null and authentication null. can you help me out!
Hi Teja, I use your example but have loop redirect starting my application, have you any idea what the problem is?
Nice straightforward example and very helpful. Thanks!
While I have been able to customize the JasperServer to use existing iBatis/Struts infrastructure and integrate authentication using existing app, there is one thorn.
How can I change the login page to accept another field? Say I want user to enter Domain in addition to username and password. And use the three to authenticate and eventually show reports. I have been able to write my custom Dao that validates jasper user from my DB, but how do I get new attribute - domain to reach my Dao, so that it can be used to authenticate the user?
While customizing the login page to accept additional fields is straightforward - you just need to modify login.jsp and make it your login page - making the new values reach \'some Java handler\' is an issue.
Appreciate inputs on this.
Nicely covered all the details
Thanks
SN
Hi all,
I wonder what is the implementation for org.springframework.security.ui.webapp.AuthenticationProcessingFilter?
I tried this example in my project using Spring security 3 and the server complains on during start up as the class cannot be found? Does anyone know what I am missing?
Thanks
Hi Teja,
This example is very nice.Could you please post rest of the implementaion calless also.Thanks in Advance.
Regards,
Raju k
I am very new to this kind of stuff.Please help to post all the classes you implemented.
Thanks,
Raju k
I tried this code but spring is complaining about list of providers.
Property 'providers' threw exception; nested exception is java.lang.IllegalArgumentException: A list of AuthenticationProviders is required
how can i fix this..tnx
Hi Teja can we make the custom authentication to use user id and password instead of user name... we have that requirement in our applciation please help me
Hi,
Is it possible to show an example using a pre-authentication scenario, where a user is already authenticated by another system (e.g. SiteMinder) and we only want to use Spring security to get the authentication details from the http request header ?
Thanks,
EDH
The problem with this post is the same problem with a lot of documentation and probably the issue your colleagues were referring to when they complained about the spring documentation. You don't explain how all these pieces work in unison to achieve the goal. In fact, you don't even explain what the specific goal of the code is. You just show us each individual piece and it's up to us to infer the rest. It's like looking at a picture with a magnifying glass. You can see each little piece clearly, but you can't see the big picture without lots of mental gymnastics. I appreciate the post and I'm not trying to be harsh. It's just hard and time consuming to properly relay complex information.
To solution the error:
java.lang.IllegalArgumentException: No authentication providers were found in the application context.
You should add the tag <custom-authentication-provider> in the bean definition myAuthenticationManager.
Could your page be any slimmer?
Hi
Can somebody tell me how to use spring security for any OS(Linux/Windows)authentication? Please reply asap.
Thanks,
AP
Very very nice article on spring security.
I would be very grateful if you can provide Tag definitions as well.
like -
what do u mean by "access" attribute in above tab etc.
Else every thing is great
very nice article. To read more on spring security, you can refer to these link
Spring Security 3 – Form Login and Logout Tutorial
Spring Security 3 – MVC integration Tutorial
To read in detail, browse this link Spring Security login example using database
How can I include another field for authentication, for example j_some_id?
Thanks.
Hi Tejas,
Thanks for sharing this helpful example.
I am beginner in Spring Security.
Here my question is if we want to use different parameter than "j_username" and "j_password". How can we do that?
I need to implement security for Spring REST web service.
Please advise.
Hi Tejas ,I am using cleartrust for pre authentication and is overriding getPreAuthenticatedCredentials method.If the headers are null as is the case for the first time then user is redirected to login page where he can enter the credentials. however the problem I have is it loops thru this method atleast 10 times before actually continuing with the chain.This actually slows down the performance.
Can you suggest what needs to be done to fix this.
Great thoughts you got there, believe I may possibly try just some of it throughout my daily life.
Data Science Interview questions and answers
Data Science Tutorial
You are doing a great job. I would like to appreciate your work for good accuracy
CCNA Training in chennai
Thanks for one marvelous posting! I enjoyed reading it; you are a great author. I will make sure to bookmark your blog and may come back someday. I want to encourage that you continue your great posts.
moto g service center in chennai
motorola service center in velachery
motorola service center in t nagar
Your very own commitment to getting the message throughout came to be rather powerful and have consistently enabled employees just like me to arrive at their desired goals.
MATLAB TRAINING IN CHENNAI | Best MATLAB TRAINING Institute IN CHENNAI
EMBEDDED SYSTEMS TRAINING IN CHENNAI |Best EMBEDDED TRAINING Institute IN CHENNAI
MCSA / MCSE TRAINING IN CHENNAI |Best MCSE TRAINING Institute IN CHENNAI
CCNA TRAINING IN CHENNAI | Best CCNA TRAINING Institute IN CHENNAI
ANDROID TRAINING IN CHENNAI |Best ANDROID TRAINING Institute IN CHENNAI
Selenium Training in Chennai | Best Selenium Training in chennai
Devops Course Training in Chennai | Best Devops Training in Chennai
Great post!
Thanks for sharing this list!
It helps me a lot finding a relevant blog in my niche!
Java Training in Chennai
Java Training in Coimbatore
Java Training in Bangalore
Thanks for posting keep updating it.
Ionic Training in Chennai
Ionic training course
German Classes in Chennai
TOEFL Coaching in Chennai
Informatica Training in Chennai
Spoken English Classes in Chennai
Ionic Training in Tambaram
Ionic Training in Adyar
I have been reading all your blogs regularly..I admit, this is one of the best blogs I have read till date. Great going.. Waiting for the next...
Spoken English Classes in Chennai
Spoken English Class in Chennai
Spoken English in Chennai
IELTS Training in Chennai
IELTS Chennai
Best English Speaking Classes in Mumbai
Spoken English Classes in Mumbai
IELTS Mumbai
IELTS Coaching in Anna Nagar
Spoken English Class in T Nagar
Admire this blog. Keep sharing more updates like this
Data Science Training in Chennai
Data Science Course in Chennai
Data Science Courses in Bangalore
Data science course in coimbatore
Data Science Certification in Chennai
Data Science Classes in Chennai
Data Science Training Institute in Chennai
Software Testing Training in Chennai
Great experience for me by reading this blog. Thank you for wonderful article.
Angularjs course in Chennai
Angularjs Training in Bangalore
angular training in bangalore
Angularjs Training in Chennai
Angularjs Training institute in Chennai
Angular 4 Training in Chennai
web design training in coimbatore
php training in madurai
Delhi Agra Jaipur Tour by Bus
Delhi to Jaipur Same Day Tour
Delhi One Day Tour Package
Delhi Sightseeing One Day
Delhi Sightseeing Tour by Bus
Delhi Jaipur One Day Tour Package
Haridwar, Rishikesh Tours by Volvo
For Data Science training in bangalore, Visit:
Data Science training in Bangalore
Nice Post
For AWS training in Bangalore, Visit:
AWS training
Great blog thanks for sharing Analyze and take over the competition with ease with Adhuntt Media’s digital marketing tools and strategies. Let’s kick-start your brand right now at Adhuntt Media
seo service in chennai
Nice blog thanks for sharing Is this a special day for you? Beautiful and fragrant flowers are sure to make it even more amazing of a day no doubt. This is why Karuna Nursery Gardens offers you the best rental plants in Chennai that too at drop dead prices.
corporate gardening service in chennai
Really thanks for sharing such an informative stuff....
data science tutorial
Great Article
Data Mining Projects
Python Training in Chennai
Project Centers in Chennai
Python Training in Chennai
Your information about asp is really interesting and innovative. Also I want you to share latest updates about asp. Can you update it in your website? Thanks for sharing.
Dot Net Training in Chennai | Dot Net Training in anna nagar | Dot Net Training in omr | Dot Net Training in porur | Dot Net Training in tambaram | Dot Net Training in velachery
Nice Blog. thanks for sharing this article. every contentb of this article is explained very clearly and the concepts are very unique.
Data Science Training Course In Chennai | Data Science Training Course In Anna Nagar | Data Science Training Course In OMR | Data Science Training Course In Porur | Data Science Training Course In Tambaram | Data Science Training Course In Velachery
Nice Blog. thanks for sharing this Blog. keep updating every concept of this blog is very Neatly represented.
Data Science Training Course In Chennai | Data Science Training Course In Anna Nagar | Data Science Training Course In OMR | Data Science Training Course In Porur | Data Science Training Course In Tambaram | Data Science Training Course In Velachery
If you are a trained professional, you can get a higher salary than other professionals can. best machine learning course in hyderabad
I want to thanks for your time for this wonderful Article!! I definitely enjoying every little bit of it and I have you bookmarked to check out new stuff you blog post.
Web Designing Training in Chennai
Web Designing Course in Chennai
Web Designing Training in Bangalore
Web Designing Course in Bangalore
Web Designing Training in Hyderabad
Web Designing Course in Hyderabad
Web Designing Training in Coimbatore
Web Designing Training
Web Designing Online Training
This blog is the general information for the feature. You got a good work for these blog.We have a developing our creative content of this mind.Thank you for this blog. This for very interesting and useful.Artificial Intelligence Training in Chennai
Ai Training in Chennai
Artificial Intelligence training in Bangalore
Ai Training in Bangalore
Artificial Intelligence Training in Hyderabad | Certification | ai training in hyderabad
Artificial Intelligence Online Training
Ai Online Training
Blue Prism Training in Chennai
Pretty article! I found some useful information in your blog, it was awesome to read, thanks for sharing this great content to my vision, keep sharing.. Need to learn Software Testing Services
selenium training in chennai
selenium training in chennai
selenium online training in chennai
selenium training in bangalore
selenium training in hyderabad
selenium training in coimbatore
selenium online training
I must thank you for the efforts you have put in penning this site. I am hoping to check out the same high-grade content by you later on as well. Keep up the good workJava training in Chennai
Java Online training in Chennai
Java Course in Chennai
Best JAVA Training Institutes in Chennai
Java training in Bangalore
Java training in Hyderabad
Java Training in Coimbatore
Java Training
Java Online Training
I just got to this amazing site not long ago. I was actually captured with the piece of resources you have got here. Big thumbs up for making such wonderful blog page!Java training in Chennai
Java Online training in Chennai
Java Course in Chennai
Best JAVA Training Institutes in Chennai
Java training in Bangalore
Java training in Hyderabad
Java Training in Coimbatore
Java Training
Java Online Training
I’m excited to uncover this page. I need to to thank you for ones time for this particularly fantastic read!! I definitely really liked every part of it and i also have you saved to fav to look at new information in your site.
hadoop training in chennai
hadoop training in tambaram
salesforce training in chennai
salesforce training in tambaram
c and c plus plus course in chennai
c and c plus plus course in tambaram
machine learning training in chennai
machine learning training in tambaram
Wonderful article.It is to define the concepts very well.Clearly explain the information.It has more valuable information for encourage me to achieve my career goal
Thanks for sharing nice post and nice urging commented at this place, I am in fact enjoying by these.I like visiting your site since I always come across interesting articles like this one. Keep sharing!
Very interesting blog. Many blogs I see these days do not really provide anything that attracts others, but believe me the way you interact is literally awesome
Azure Training in Chennai
Azure Training in Bangalore
Azure Training in Hyderabad
Azure Training in Pune
Azure Training | microsoft azure certification | Azure Online Training Course
Azure Online Training
Pretty article! I found some useful information in your blog, it was awesome to read, thanks for sharing this great content to my vision, keep sharing.
oracle training in chennai
oracle training in porur
oracle dba training in chennai
oracle dba training in porur
ccna training in chennai
ccna training in porur
seo training in chennai
seo training in porur
This is the exact information I am been searching for, Thanks for sharing the required infos with the clear update and required points. To appreciate this I like to share some useful information.
web designing training in chennai
web designing training in omr
digital marketing training in chennai
digital marketing training in omr
rpa training in chennai
rpa training in omr
tally training in chennai
tally training in omr
Your posts is really helpful for me.Thanks for your wonderful post.It is really very helpful for us and I have gathered some important information from this blog.
java training in chennai
java training in tambaram
aws training in chennai
aws training in tambaram
python training in chennai
python training in tambaram
selenium training in chennai
selenium training in tambaram
Very nice post here and thanks for it .I always like and such a super contents of these post. oracle training in chennai
Great efforts put it to find the list of articles which is very useful to know, Definitely will share the same to other forums.
oracle training in chennai
oracle training in velachery
oracle dba training in chennai
oracle dba training in velachery
ccna training in chennai
ccna training in velachery
seo training in chennai
seo training in velachery
This is the exact information I am been searching for, great content.
angular js training in chennai
angular js training in annanagar
full stack training in chennai
full stack training in annanagar
php training in chennai
php training in annanagar
photoshop training in chennai
photoshop training in annanagar
Fantastic article I ought to say and thanks to the info. Instruction is absolutely a sticky topic. But remains one of the top issues of the time. I love your article and look forward to more.
Data Science Training In Chennai
Data Science Online Training In Chennai
Data Science Training In Bangalore
Data Science Training In Hyderabad
Data Science Training In Coimbatore
Data Science Training
Data Science Online Training
I am very new to this kind of stuff.Please help to post all the classes you implemented.
java training in chennai
java training in annanagar
aws training in chennai
aws training in annanagar
python training in chennai
python training in annanagar
selenium training in chennai
selenium training in annanagar
Outstanding blog appreciating your endless efforts in coming up with an extraordinary content. Which perhaps motivates the readers to feel excited in grasping the subject easily. This obviously makes every readers to thank the blogger and hope the similar creative content in future too.
IELTS Coaching in chennai
German Classes in Chennai
GRE Coaching Classes in Chennai
TOEFL Coaching in Chennai
spoken english classes in chennai | Communication training
Very very nice article on spring security.
I would be very grateful .
acte chennai
acte complaints
acte reviews
acte trainer complaints
acte trainer reviews
acte velachery reviews complaints
acte tambaram reviews complaints
acte anna nagar reviews complaints
acte porur reviews complaints
acte omr reviews complaints
Nice tutorial. Thanks for sharing the valuable information. it’s really helpful. Who want to learn this blog most helpful. Keep sharing on updated tutorials…
AWS Course in Bangalore
AWS Course in Hyderabad
AWS Course in Coimbatore
AWS Course
AWS Certification Course
AWS Certification Training
AWS Online Training
AWS Training
Nice tutorial. Thanks for sharing the valuable information. it’s really helpful. Who want to learn this blog most helpful.
acte reviews
acte velachery reviews
acte tambaram reviews
acte anna nagar reviews
acte porur reviews
acte omr reviews
acte chennai reviews
acte student reviews
This post is very impressive for me. I read your whole blog and I really enjoyed your article. Thank you...!valuable blog thanks for sharing it...waiting for next update...
IELTS Coaching in chennai
German Classes in Chennai
GRE Coaching Classes in Chennai
TOEFL Coaching in Chennai
spoken english classes in chennai | Communication training
Thanks for one marvelous posting! I enjoyed reading it; you are a great author. I will make sure to bookmark your blog and may come back someday. I want to encourage that you continue your great posts.
AWS Course in Bangalore
AWS Course in Hyderabad
AWS Course in Coimbatore
AWS Course
AWS Certification Course
AWS Certification Training
AWS Online Training
AWS Training
Great post thanks fro sharing.
acte reviews
acte velachery reviews
acte tambaram reviews
acte anna nagar reviews
acte porur reviews
acte omr reviews
acte chennai reviews
acte student reviews
Excellent article. Very interesting to read. I really love to read such a nice article.
Data Science-Alteryx Training Course in Coimbatore | Online Data Science Course in Coimbatore | Data Science Training in Coimbatore | Best Data Science Training Institute | Data Science Course in Coimbatore Online Data Science Training in Coimbatore | Data Science with python Training Course in Coimbatore | Data Science Traning in saravanampatti
Excellent article. Very interesting to read. I really love to read such a nice article.
Android Training Institute in Coimbatore Best Android Training Institutes in Coimbatore | Android Training Course in Coimbatore | Mobile App Training Institute in Coimbatore | Android Training Institutes in Saravanampatti | Online Android Training Institutes in Coimbatore | Mobile Development Training Institute in Coimbatore
in data science you will not only study about the past but also the present and the future of data. It is also said that data science is the base of artificial learning and everyone knows how artificial intelligence has made a dramatic entrance into our lives. data science course syllabus
Wow what a Great Information about World Day its exceptionally pleasant educational post. a debt of gratitude is in order for the post.
data science course in India
Wonderful blog with great piece of information. Regards to your effort. Keep sharing more such blogs.Looking forward to learn more from you.
DevOps Training in Chennai
DevOps Course in Chennai
Mua vé máy bay tại Aivivu, tham khảo
bay từ hàn quốc về việt nam
đặt vé máy bay hà nội hồ chí minh
vé máy bay từ huế ra hà nội
ve may bay di nha trang gia re
vé máy bay đi Huế
taxi sân bay nội bài
Thanks for sharing this amazing content. I really appreciate your hard work. Primavera Course in Chennai | primavera online training
career towards a sky-high with Infycle Technologies. Infycle Technologies provides the top Oracle DBA Training in Chennai and offering programs in Oracle such as Oracle PL/SQL, Oracle Programming, etc., in the 200% hands-on practical training with professional specialists in the field. In addition to that, the interviews will be arranged for the candidates to set their careers without any struggle. Of all that, Cen percent placement assurance will be given here. To learn Oracle DBA for making the best job for your life, call 7502633633 to Infycle Technologies and grab a free demo to know moreNo.1 Oracle DBA Training in Chennai | Infycle Technologies
Thanks for Sharing this Valuable Information with us: this is very useful for me. Keep it Up.
artificial intelligence course
Nice and very informative blog, glad to learn something through you.
machine learning course aurangabad
The Latest Mount and Blade Warband 2022 Crack is the standalone expansion pack to the strategy action playing game. Mount And Blade Warband Free Download With Serial Key
SiSoftware Sandra R14 Build 31.93 Crack the latest version of its award-winning utility. It includes remote analysis, benchmarking.Click Here
I’m wishing you a day as bright as your smile, a day as sweet as your heart and a day as amazing as you are. Good morning my love. Love Husband Good Morning
Thanks a lot for all your valuable articles! We are really happy about your thoughts...
Digital Marketing Training In Bangalore
Useful post thanks for sharing
Sai Satcharitra Pdf
Useful blog
gold price in chennai
today gold rate namakkal
Post a Comment